【问题标题】:MVC3 Ajax Form Validation with Partial View not Working带有部分视图的 MVC3 Ajax 表单验证不起作用
【发布时间】:2012-09-28 21:39:06
【问题描述】:

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

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

【问题讨论】:

标签: c# javascript asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

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

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

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

并添加调用 parse() 就像解释 here:

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

【讨论】:

    【解决方案2】:

    始终确保包含对

    的必要引用

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

    【讨论】:

    • 所有这些 JQuery js 文件都存在。您无法在 cshtml 中看到它们,因为它是部分视图。
    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多