MVC 3,(razor)加载部分验证

Nic*_*ckz 9 asp.net asp.net-mvc

嗨,我正在用MVC 3(razor)为ajax向导做准备.我注意到的一个奇怪的现象是,当您将部分视图返回到UpdateTargetId时会插入视图,但不会添加/应用Unobtrusive JavaScript.如果我在ajax块之外加载局部视图,例如

@Html.Partial("Company")
Run Code Online (Sandbox Code Playgroud)

它工作得很好,所以我没有错过任何标准库,我的网络配置都很好.

所以此刻我有点难过.

我的观点如下:

@using(Ajax.BeginForm("Step", "Origination", new AjaxOptions { UpdateTargetId = "stepArea" })){

    <div id="stepArea"></div>
   <input id="btnSubmit" type="submit" value="submit" />
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public ActionResult Step(FormCollection formCollection)
{
    if (this.Request.IsAjaxRequest())
    {
        switch ((TempData["step"] as string))
        {
            case "Company":
                TempData["step"] = "Person";
                return PartialView("Company");

            case "Person":
                TempData["step"] = "Pay";
                return PartialView("Person");

            case "Settlement":
                return PartialView("Pay");

            default:
                TempData["step"] = "Company";
                return PartialView("UserType");
        }
    }
    return View();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,部分视图的验证是否可以通过部分刷新进行初始化/实施?

Nic*_*ckz 10

看了几个论坛并做了一些实验.最后一块拼图,在返回局部视图后导致验证工作.jquery.validate.unobtrusive不使用动态注入元素

<script type="text/javascript">

    function validateAjaxForm() {
        $("form").removeData("validator");
        $("form").removeData("unobtrusiveValidation");
        $.validator.unobtrusive.parse("form");
        return $('#form').valid();
    }
</script>


 @{ Html.EnableClientValidation(true); } 
@using (Ajax.BeginForm("Step", "Origination", new AjaxOptions { UpdateTargetId = "stepArea", OnBegin = "return validateAjaxForm();" }, new { id = "form" }))
{
    <div id="stepArea"></div>
    <input id="btnSubmit" type="submit" value="submit" />
}
Run Code Online (Sandbox Code Playgroud)

工作得很好.


arc*_*hil 9

如果在视图中为null,请尝试初始化FormContext.这应该为生成的控件添加不显眼的验证"data-val-*"属性

@{
    if (Html.ViewContext.FormContext == null)
    {
        Html.ViewContext.FormContext = new FormContext();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 干杯增加了不引人注意的数据-val-*.现在我需要找到一种方法来通过ajax.beginform提交动作来进行验证触发.奇怪的是,验证没有触发. (3认同)