不显眼的验证不适用于Ajax.BeginForm

Ole*_*syk 33 asp.net-mvc unobtrusive-validation asp.net-mvc-3

我有我放的Model1的View,Ajax.BeginForm()在这个View中我有Part2和Model2 Ajax.BeginForm().所以只有在第一种形式工作unobtrusive validation.为什么只在第一次表单工作验证?

第一个视图

@model Model1

@using (Ajax.BeginForm("Action1","Controller",null,new AjaxOption(){ onSuccess = "alert('=)')"},null)
{

   <intput type="submit" value="Save" />
}


Model2 model2 = new Model2();
@Html.EditorFor(m=>model2)
Run Code Online (Sandbox Code Playgroud)

**在Model2视图中我有.**

@model Model2 
@using (Ajax.BeginForm("AddStreet","Controller",new AjaxOption(){onSuccess = "alert('=)'")},option,null)
{

        @Html.LabelFor(m => Model.Name):
        @Html.TextBoxFor(m => Model.Name)
        @Html.ValidationMessageFor(m => Model.Name)

       <intput type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)

谢谢@Darin Dimitrov的回答.

Dar*_*rov 55

这是因为第二个视图在稍后阶段加载了AJAX,并且需要$.validator.unobtrusive.parse(...) 在将其内容注入DOM后立即调用,以便启用不显眼的验证.请查看以下博客文章以获取更多详细信息.

因此,在您的情况下,不是在第一个AJAX调用的回调中发出警报,而是OnSuccess订阅将调用此方法的javascript函数:

@using (Ajax.BeginForm(
    "Action1",
    "Controller",
    null,
    new AjaxOptions { 
        OnSuccess = "onSuccess",
        UpdateTargetId = "result"
    },
    null)
)
{
    <input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)

然后在你的javascript文件中:

var onSuccess = function(result) {
    // enable unobtrusive validation for the contents
    // that was injected into the <div id="result"></div> node
    $.validator.unobtrusive.parse($(result));
};
Run Code Online (Sandbox Code Playgroud)


dpe*_*rez 26

您需要在Partial View中添加这两个文件,即使它已经在Shared/_Layout.cshtml中:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

或者将其放在您的部分中:

<script type="text/javascript" language=javascript>
    $.validator.unobtrusive.parse(document);
</script>
Run Code Online (Sandbox Code Playgroud)