这是我局部视图中的代码-

@using (Ajax.BeginForm("SaveLayout", new AjaxOptions { HttpMethod = "Post"}))
{
@Html.ValidationSummary(true)
<div style="padding: 10px;">
    <div class="editor-field">
        Layout Name: @Html.EditorFor(m => m.Name)
        @Html.ValidationMessageFor(m => m.Name)</div>
    <br />
    <br />
    <input type="submit" value="Save" />
    <input type="button" onclick="CloseDialog()" value="Cancel" />
</div>
}


在我的_Layout.cshtml中看起来像这样-

<script src="@Url.Content("~/Scripts/JQuery/jquery-1.6.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/JQuery/jquery-ui.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/JQuery/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/JQuery/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/JQuery/jquery.validate.unobtrusive.js")" type="text/javascript"></script>


我在我的根web.config中有这个-

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


这就是我的控制器动作的样子-

[HttpPost]
public ActionResult SaveLayout(Model.Layout layout)
{
    if (ModelState.IsValid)
    {
        ILayout.SaveLayout(layout);
    }
    return PartialView("_SaveLayout", layout);
}


而且很遗憾,这是我的模型-

public class Layout : BaseModel
{
    [Required(ErrorMessage = "Please assign name to the compare group.")]
    public string Name { get; set; }
}


当名称字段为空并且用户单击“保存”按钮时,我无法进行客户端验证。有人可以建议我在这里做错什么吗?任何帮助将不胜感激。

最佳答案

一旦使用表单的新内容更新了DOM,客户端验证就会停止工作,因为它最初附加的所有事件处理程序都会死亡。这是您可能要看的blog post,它解释了如何在动态加载的内容中重新附加客户端验证。

基本上,在更新DOM时,必须在AJAX成功回调中使用$ .validator.unobtrusive.parse方法,以便重新附加客户端验证。

09-28 07:20