2013-10-11 28 views
2

我有一個包含一些控件的形式 - 沒有任何幻想:MVC CheckBoxFor造成不引人注目的驗證被繞過

@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    <fieldset> 
     <legend>EmployeeViewModel</legend> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Employee.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Employee.Title) 
etc..... 

UPDATE 我的視圖模型:

public class EmployeeCreateViewModel 
    { 
     public EmployeeCreateModel Employee { get; set; } 
..etc 

我的員工型號:

public class EmployeeCreateModel 
    { 
     [Required] 
     public string Title { get; set; } 

     [DisplayName("Job Title")] 
     [Required] 
     public string JobTitle { get; set; } 

     public bool Active { get; set; } 
...etc 

問題 - 我正在使用不顯眼的驗證工作正常直到我添加一個複選框到窗體。無論複選框狀態如何,都會提交表單,繞過客戶端驗證,並且錯誤會被服務器端驗證捕獲。這是我的複選框:

<div class="editor-label"> 
    @Html.LabelFor(model => model.Employee.Active) 
</div> 
<div class="editor-field"> 
    @Html.CheckBoxFor(model => model.Employee.Active) 
</div> 

複選框模型屬性不是必填字段,所以它並不需要驗證,我可以看到它有一個有效的真/假值,當它到達控制器方法。

爲什麼會發生這種情況,我該如何解決?

+1

向我們展示您的模型。 –

+0

所以你不希望它在控制器中顯示錯誤,如果它沒有選中? – Andrew

+0

@Andrew - 傳遞給控制器​​的值如果未選中,則爲false – markpsmith

回答

3

首先,打開JavaScript控制檯(例如,Chrome檢查面板),看看你是否得到遺漏的類型錯誤:對象的翻譯:有沒有方法「活」錯誤從jquery.unobtrusive-ajax.js。

如果你看到這個錯誤,你可能使用jQuery 1.9.x或更高版本。如果選中「保留導航日誌」(chrome),則會看到一條錯誤消息:「未捕獲的SyntaxError:意外的令牌u」。

要解決此問題,請在jquery 1.9.x之後包含jquery migrate 1.2.x。

<script src="/Scripts/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script> 

有關詳細信息,請參閱此post