2011-10-07 67 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客户端验证的工作原理,第一。再次感谢! –