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

C# 部分视图的MVC3 Ajax表单验证不起作用,c#,javascript,asp.net-mvc,asp.net-mvc-3,razor,C#,Javascript,Asp.net Mvc,Asp.net Mvc 3,Razor,我遇到了一个奇怪的问题,即局部视图(由Ajax.ActionLink呈现)中不引人注目的验证不起作用 这是局部视图: @model MyWeb.Models.PersonSkill @using (Ajax.BeginForm("EditSkill", null, new AjaxOptions { UpdateTargetId = "skills" }, new { id = "EditSkillForm" })) { @Html.HiddenFor(model => model.Id)

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

视图渲染得很好。它会将数据发回服务器,但不会进行验证。

始终确保包含对的必要引用


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

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

我通过将OnSuccess用户添加到我的呼叫中解决了此问题:

@Ajax.ActionLink("Edit", "LoadEditSkill", new { id = item.Id }, new AjaxOptions() { UpdateTargetId = "editSkillDialog", OnSuccess = "onSuccess" }, new { @class = "editSkill" })
并添加调用parse()的命令,如所述:

var onSuccess=函数(){
//对内容启用不引人注目的验证
//这是注入节点的
$.validator.unobtrusive.parse($(“#editSkillDialog”);
};

所有这些JQuery js文件都存在。您无法在cshtml中看到它们,因为它是局部视图。
@Ajax.ActionLink("Edit", "LoadEditSkill", new { id = item.Id }, new AjaxOptions() { UpdateTargetId = "editSkillDialog", OnSuccess = "onSuccess" }, new { @class = "editSkill" })
var onSuccess = function () {
    // enable unobtrusive validation for the contents
    // that was injected into the <div id="result"></div> node
    $.validator.unobtrusive.parse($("#editSkillDialog"));
};