1

この検証は機能するはずですが、ドロップダウンで値が選択されていない場合、投稿はすぐに開始されます。別の非部分的なものに移動すると、検証は正常に機能します。簡潔にするために編集。

ビューモデル:

public class BuilderVM
{
    [Display(Name = "Select A Task")]
    [Required]
    public int? TaskId { get; set; }
    public GenericSelectList Tasks { get; set; }
}

親ビュー (部分ビューは、投稿後にこのページの下部にレンダリングされます。お気づきかもしれませんが、ajax オプションは、部分ビューが div でレンダリングされることを指示しますid="MoveOn"):

@{
 ViewBag.Title = "Builder";
 AjaxOptions ajaxOpts = new AjaxOptions
 {
    LoadingElementDuration = 2,
    LoadingElementId = "removeChoice",
    UpdateTargetId = "MoveOn"
 };
}
<div id="removeChoice">
@using (Ajax.BeginForm("Selected", ajaxOpts))
{
<fieldset>
    <div>
     //Data For Submission (This data validates perfectly before post)
    </div>
    <p><input type="submit" value="Go" /></p>
</fieldset>
}
</div>
<div id="MoveOn"></div>

部分ビュー (親ビューからの投稿後にレンダリング):

@model namespace.BuilderVM
@{
 AjaxOptions ajaxOpts = new AjaxOptions
  {
    UpdateTargetId = "Entry",
    LoadingElementDuration = 2,
    LoadingElementId = "RemoveEntry"
  };
}

<div id="RemoveEntry">
<h2>Details</h2>
@using (Ajax.BeginForm("Data", ajaxOpts))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Data</legend>
<div>
    <span class="label">@Html.LabelFor(model => model.TaskId)</span>
    <span class="content">
    @Html.DropDownListFor(
        model => model.TaskId,
        new SelectList(
            Model.Tasks.Values,
            "Id",
            "DisplayFields",
            Model.Tasks.StartValue
        ),
        Model.Tasks.Message
    )
    </span>@Html.ValidationMessageFor(model => model.TaskId)
</div>
<p><input type="submit" value="Add Work Completed Data" /></p>
</fieldset>
}
</div>
<div id="Entry"></div>

[Required]dropdownlistfor は、投稿ボタンがクリックされたときに注釈が付けられる model.TaskId にバインドされ( input type="submit")、ドロップダウンリストで値が選択されていませんが、検証メッセージを停止して追加する代わりに、投稿が通過します。通常のビューにコピーペーストすると問題なく動作するため、これを修正するために何をすべきかわかりません。部分ビューの検証が機能しないのはなぜですか?

4

1 に答える 1

3

問題は、バリデーターが ($(document).ready() を使用して) 最初に読み込まれることです。あなたができることは次のとおりです(部分的なビューに挿入):

    <script>
        $(function() {
            $.validator.unobtrusive.parse('.Content');
        });
    </script>

与えられた情報から、これがあなたの問題であると思います。これがお役に立てば幸いです。

于 2012-04-09T21:54:18.323 に答える