我已阅读关于如何验证我的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
谢谢。这给了我一些很棒的点子! –