我已閱讀關於如何驗證我的MVC模型的工作。它太酷了。驗證不屬於模型的輸入字段
但我需要驗證嚴格的UI情況,這與模型無關。具體來說,我需要檢查用戶點擊鏈接之前點擊了幾個複選框中的一個。我再次強調,複選框不代表模型數據:它們嚴格用於查看和控制器目的。
在WebForms世界中,我只是將其放在RequiredFieldValidator中。不代表模型上的字段的字段等同於什麼?
我已閱讀關於如何驗證我的MVC模型的工作。它太酷了。驗證不屬於模型的輸入字段
但我需要驗證嚴格的UI情況,這與模型無關。具體來說,我需要檢查用戶點擊鏈接之前點擊了幾個複選框中的一個。我再次強調,複選框不代表模型數據:它們嚴格用於查看和控制器目的。
在WebForms世界中,我只是將其放在RequiredFieldValidator中。不代表模型上的字段的字段等同於什麼?
你需要做一些定製模型綁定來檢查請求對象,並採取相應的行動(添加的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
您可以使用jquery驗證將驗證規則注入驗證集。
有趣,謝謝。這將是嚴格的jQuery解決方案,然後 - 與MVC框架無關? –
快速和骯髒的解決方案,使用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>
謝謝。然而,我期望的是利用MVC客戶端驗證的一些方法,並將驗證消息顯示在ValidationSummary等中。但是我可能需要更好地理解MVC 3客戶端驗證的工作原理,第一。再次感謝! –
謝謝,這非常有趣。我以前從來沒有聽說過這樣做。 –
@AnnL。此外,如果您只是在尋找客戶端解決方案,則可以創建一個本質上擴展模型的ViewModel,使視圖採用新的ViewModel而不是Model,並將「複選框」字段作爲屬性添加到ViewModel。然後,您可以使用MVC中包含的默認模型綁定。有關詳細信息,請參閱以下鏈接:http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx – ooPeanutButter
謝謝。這給了我一些很棒的點子! –