MVC3 Remote Validation не е задействана?

Създадох много прост тестов проект, за да илюстрирам проблема.

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

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="/[email protected]("~/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 pion на 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

d/l и можете да сравнявате файлове.

person Adam Tuliper - MSFT    schedule 01.12.2011
comment
Мисля, че счупих кода ви, изтегленият проект просто работи добре. Добавих [Remote(AddressValidate, Demo, ErrorMessage = Address is invalid.)] public string Address { get; комплект; } към вашия клас Person, премахна RegularExpression и Required от вашето свойство EmailAddress. Сега адресът ми изобщо не е валидиран. - person hardywang; 02.12.2011

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

Задължителният валидиращ атрибут не работи в asp.net mvc 3, докато другите работят

person Mihalis Bagos    schedule 01.12.2011