2012-04-09 23 views
1

此驗證應該可以正常工作,但是如果下拉列表中沒有選定的值,該帖子就會觸發它。當移動到另一個非部分驗證工作就好了。爲簡潔起見進行編輯。爲什麼驗證會在部分視圖中斷裂?

視圖模型:

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

父視圖(部分觀點是在後門柱這個頁面的底部呈現爲您可能已經注意到,阿賈克斯選項規定,部分觀點將在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> 

儘管dropdownlistfor綁定到model.TaskId,當單擊後按鈕(input type="submit")時,它被註釋爲[Required],並且在下拉列表中沒有選擇任何值,但該帖子會經過而不是停止並追加驗證消息。我不知道該如何解決這個問題,因爲當複製粘貼到常規視圖時,它工作得很好。爲什麼不通過局部視圖驗證工作?

回答

3

問題是驗證器只是在開始時加載(使用$(document).ready())。 你可以做如下(在局部視圖插入):

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

從我以爲這是你的問題給定的信息。希望這可以幫助你。

+0

您在視圖中包含哪些JavaScript文件?我假設你有jQuery,jQuery驗證器,jQuery不顯眼的驗證器和其他(如AJAX等) – 2012-04-09 22:01:01

+0

事實上,你的第一個答案是正確的。但是,您有一個錯誤,導致它無法正常工作。一旦我發現錯字,它工作得很好。你有'.validator.unobtrusive.parse('#Content');',但它應該是'('.Content')',因爲內容是一個類而不是一個id。 – 2012-04-09 22:01:21

+0

啊好的完美!我看起來並不那麼親密,並且假設你在那裏有一個ID。做得好! – 2012-04-09 22:03:43