部分视图的MVC3 Ajax表单验证不起作用

nca*_*ral 4 javascript c# asp.net-mvc razor asp.net-mvc-3

我有一个奇怪的问题,部分视图(由Ajax.ActionLink呈现)中的不显眼的验证不起作用.

这是部分视图:

@model MyWeb.Models.PersonSkill
@using (Ajax.BeginForm("EditSkill", null, new AjaxOptions { UpdateTargetId = "skills" }, new { id = "EditSkillForm" }))
{
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.YearsOfExperience)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.YearsOfExperience)
    @Html.ValidationMessageFor(model => model.YearsOfExperience)
</div>

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

这被称为:

@Ajax.ActionLink("Edit", "LoadEditSkill", new { id = item.Id }, new AjaxOptions() { UpdateTargetId = "editSkillDialog" }, new { @class = "editSkill" })
Run Code Online (Sandbox Code Playgroud)

视图很好.它将数据发回服务器,但它不会验证.

nca*_*ral 5

非常感谢Joe Tuskan指出了正确的方向.

我通过在我的调用中添加一个OnSuccess订阅者来修复此问题:

@Ajax.ActionLink("Edit", "LoadEditSkill", new { id = item.Id }, new AjaxOptions() { UpdateTargetId = "editSkillDialog", OnSuccess = "onSuccess" }, new { @class = "editSkill" })
Run Code Online (Sandbox Code Playgroud)

并加入调用解析(),如解释在这里:

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