Удаленная проверка MVC3 не запущена?

Я создал очень простой тестовый проект, чтобы проиллюстрировать проблему.

Мой модельный класс

public class HomeModel
{
    [Required(ErrorMessage="Missing property1.")]
    public string Property1
    {
        get;
        set;
    }

    [Remote("ValidateProperty2", "Home", HttpMethod="Get",  AdditionalFields = "Property3", ErrorMessage="Property2 wrong!")]
    public string Property2
    {
        get;
        set;
    }

    public string Property3
    {
        get;
        set;
    }
}

Мой контроллер

public class HomeController : Controller
{
    public ActionResult Index()
    {
        HomeModel model = new HomeModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(HomeModel model)
    {
        return View(model);
    }

    public ActionResult ValidateProperty2(string property2, string property3)
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }
}

И мой взгляд

@model RemoteValidationTest.Models.HomeModel

@{
Layout = null;
}

<!DOCTYPE html>

<html>
<head>
<title>Index</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
</head>
<body>
@using (Ajax.BeginForm(new AjaxOptions
{
    HttpMethod = "POST"
}))
{
    @Html.TextBoxFor(x => x.Property1) @Html.ValidationMessageFor(x => x.Property1)<br />
    @Html.TextBoxFor(x => x.Property2) @Html.ValidationMessageFor(x => x.Property2)<br />
    @Html.TextBoxFor(x => x.Property3) @Html.ValidationMessageFor(x => x.Property3)<br />

    <input type="submit" />
}
</body>
</html>

И мой web.config

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

Здесь нет ничего особенного. У меня есть класс модели с 3 свойствами. Первый установлен как обязательный, а второй - удаленная проверка, я полагал, что правильно создал метод действия. Я установил точку прерывания на функцию ValidateProperty2, она никогда не вызывается.

Я также использовал FireBug, то же самое клиентская часть даже не пытается вызвать серверную часть.

Что не так с кодом здесь?

Редактировать 1: я думаю, что я что-то понял, удаленная проверка будет срабатывать только тогда, когда элемент управления (например, текстовое поле) имеет значение в стороне. Пустой элемент управления никогда не вызовет проверку. В моем случае я на самом деле пытаюсь реализовать более сложную логику, мне нужно, чтобы проверка срабатывала, даже когда текст управления пуст (чтобы проверить значение другого свойства). Это вообще возможно?


person hardywang    schedule 01.12.2011    source источник
comment
Вы подтвердили, что это работает без атрибута AdditionalFields? Взгляните на это: stackoverflow.com/questions/4752877/   -  person Mihalis Bagos    schedule 02.12.2011
comment
@Mihalis Bagos, он не срабатывает без AdditionalFields.   -  person hardywang    schedule 02.12.2011
comment
Поскольку тогда код выглядит нормально, рассмотрите возможность обновления библиотек js через NuGet и повторите попытку. Кроме того, вы можете найти рабочий пример здесь: msdn.microsoft.com/en-us/library/gg508808%28v=vs.98%29.aspx   -  person Mihalis Bagos    schedule 02.12.2011
comment
Я думаю, что я что-то понял, удаленная проверка срабатывает только тогда, когда элемент управления (например, текстовое поле) имеет значение в стороне. Пустой элемент управления никогда не вызовет проверку.   -  person hardywang    schedule 02.12.2011
comment
ах, теперь я вижу, отправляя как ответ   -  person Mihalis Bagos    schedule 02.12.2011


Ответы (2)


У меня есть рабочая версия для mvc3: http://completedevelopment.blogspot.com/2011/08/remote-ajax-validation-in-mvc3.html

д/л это и можно сравнивать файлы.

person Adam Tuliper - MSFT    schedule 01.12.2011
comment
Я думаю, что сломал ваш код, загруженный проект просто отлично работает. Я добавил [Remote (AddressValidate, Demo, ErrorMessage = Адрес недействителен.)] public string Address { get; набор; } в ваш класс Person, удалили RegularExpression и Required из вашего свойства EmailAddress. Теперь мой адрес вообще не проверяется. - person hardywang; 02.12.2011

Проблема в том, что проверка не срабатывает автоматически при первом нажатии кнопки отправки. Вот как вы инициируете проверку при загрузке страницы, чтобы она срабатывала каждый раз, когда это необходимо при отправке:

Обязательный атрибут проверки не работает в asp.net mvc 3, пока другие работают

person Mihalis Bagos    schedule 01.12.2011