2012-04-09 10 views
1

この検証はうまくいくはずですが、ドロップダウンに選択された値がない場合は直後にポストが発生します。別の部分でない部分に移動すると、検証は正常に機能します。簡潔さのために編集されました。パーシャルビューで検証が中断するのはなぜですか?

のViewModel:

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> 

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

答えて

3

問題は、バリデータがちょうど最初($(document).ready()で読み込まれるということです)。私はこれがあなたの問題であると仮定与えられた情報から、

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

: 何ができることは、以下の(部分図の挿入)です。これがあなたを助けることを願ってください。

+0

ビューにはどのJavaScriptファイルが含まれていますか?私はあなたがjQuery、jQueryのバリデーター、jQueryの控えめなバリデーターなど(AJAXのものなど)を持っていると仮定します。 –

+0

実際、最初の答えは正しいです。しかし、あなたはそれが機能しないようにするためにタイプミスがありました。私がタイプミスをキャッチしたら、それはうまくいった。あなたは '$ .validator.unobtrusive.parse( '#Content');'を持っていましたが、コンテンツはクラスでありidではないので、 '( '.Content')'であったはずです。 –

+0

ああ、完璧!私はそんなに近づかずにあなたにIDがあると仮定しました。よくやった! –

関連する問題