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

私を正しい方向に向けてくれたJoeTuskanに感謝します。

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 に答える