4

我有一个奇怪的问题,即局部视图(由 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>
}

这被称为:

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

视图渲染得很好。它将数据回传到服务器,但它只是不验证。

4

2 回答 2

5

非常感谢Joe Tuskan为我指明了正确的方向。

我通过在通话中添加 OnSuccess 订阅者解决了这个问题:

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

并像这里解释的那样添加调用 parse() :

var onSuccess = function () {
    // enable unobtrusive validation for the contents
    // that was injected into the <div id="result"></div> node
    $.validator.unobtrusive.parse($("#editSkillDialog"));
};
于 2012-10-08T16:57:40.720 回答
1

始终确保您包含必要的参考资料

jquery.validate.min.js 和 jquery.validate.unobtrusive.min.js,当然还有主要的 jquery 库,这通常是最常见的问题,正如我在您的 cshtml 中看到的那样,它们也不存在于您的页面中。

于 2012-10-08T15:50:52.423 回答