2011-10-07 58 views
0

我已閱讀關於如何驗證我的MVC模型的工作。它太酷了。驗證不屬於模型的輸入字段

但我需要驗證嚴格的UI情況,這與模型無關。具體來說,我需要檢查用戶點擊鏈接之前點擊了幾個複選框中的一個。我再次強調,複選框不代表模型數據:它們嚴格用於查看和控制器目的。

在WebForms世界中,我只是將其放在RequiredFieldValidator中。不代表模型上的字段的字段等同於什麼?

回答

1

你需要做一些定製模型綁定來檢查請求對象,並採取相應的行動(添加的ModelState錯誤,等...),這是關係到自定義模型結合,應該是有益的職位。

ASP.Net MVC Custom Model Binding explanation

一旦在自定義模型綁定,您可以在CreateModel方法與此類似添加代碼:

Dim request As HttpRequestBase = controllerContext.HttpContext.Request 
If Not request.Form.AllKeys.Contains("YourCheckBoxName") Then 
    bindingContext.ModelState.AddModelError("AnError", "You must check the box first") 
End If 
+0

謝謝,這非常有趣。我以前從來沒有聽說過這樣做。 –

+0

@AnnL。此外,如果您只是在尋找客戶端解決方案,則可以創建一個本質上擴展模型的ViewModel,使視圖採用新的ViewModel而不是Model,並將「複選框」字段作爲屬性添加到ViewModel。然後,您可以使用MVC中包含的默認模型綁定。有關詳細信息,請參閱以下鏈接:http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx – ooPeanutButter

+0

謝謝。這給了我一些很棒的點子! –

0

您可以使用jquery驗證將驗證規則注入驗證集。

+0

有趣,謝謝。這將是嚴格的jQuery解決方案,然後 - 與MVC框架無關? –

-1

快速和骯髒的解決方案,使用css類名來檢查是否其中一個框已被選中。

<input type="checkbox" value="1" name="something" class="boxGroupName" /> Check1 
<input type="checkbox" value="2" name="another" class="boxGroupName" /> Check1 
<input type="checkbox" value="3" name="third" class="boxGroupName" /> Check1 

<input type="submit" id="buttonId" />  

<script type="text/javascript"> 
$(function() { 
    $('#buttonId').click(function() { 
     if ($('.boxGroupName:checked').length == 0) { 
      alert('Check some boxes, ehh?'); 
      return false; 
     } 
     return true; 
    }); 
}); 
</script> 
+0

謝謝。然而,我期望的是利用MVC客戶端驗證的一些方法,並將驗證消息顯示在ValidationSummary等中。但是我可能需要更好地理解MVC 3客戶端驗證的工作原理,第一。再次感謝! –