MVC3 Удаленная проверка не запущена? - PullRequest
1 голос
/ 02 декабря 2011

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

Моя модель класса

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 свойствами. Первый задан как обязательный, а второй - удаленная проверка, я полагал, что правильно создал метод действия. Я установил функцию break piont на ValidateProperty2, она никогда не вызывается.

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

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

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

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

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

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

0 голосов
/ 02 декабря 2011

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

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

...