4

我有一个动作,想对参数做一些简单的检查

ActionResult Test([Range(0,10)] int i)
{
  // ModelState.IsValid is always true, i want it to be false if i > 10 or i < 0
}

无论如何要解决这个问题或解决它或 MVC 提供的任何替代方案?

4

3 回答 3

2

我想在给你一些替代选项之前检查数据注释属性定义。我惊讶地看到它的AttributeUsage定义是这样的,你也可以应用到方法参数上,不幸的是它没有像我自己尝试的那样工作。虽然我不确定他们为什么允许此参数作为方法参数(我认为它有效但不起作用)

关于替代选项,你可以试试这个,

public ActionResult Test(int i)
{
   var rangeAttr = new RangeAttribute(0, 10);

   if(!rangeAttr.IsValid(i))
     ModelState.AddModelError(i.ToString(), rangeAttr.FormatErrorMessage("i"));       
}
于 2012-06-11T10:47:02.273 回答
0

在 mvc 中,最合适的方法是在你的模型中简单地放置一个属性

 [Range(0,10)]
 public int yourproperty{ get; set; }

阅读此 http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-6

于 2012-06-11T10:09:48.920 回答
0

如果超出该范围,您可以创建自己的错误,这会使 IsValid 为假。

所以例如你可以做类似的事情

    if(i < 0 || i > 10)
        ModelState.AddModelError("Range", "Invalid Range");

我相信这应该有效。

于 2012-06-11T10:10:18.963 回答