我有一个动作,想对参数做一些简单的检查
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 提供的任何替代方案?
我有一个动作,想对参数做一些简单的检查
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 提供的任何替代方案?
我想在给你一些替代选项之前检查数据注释属性定义。我惊讶地看到它的AttributeUsage
定义是这样的,你也可以应用到方法参数上,不幸的是它没有像我自己尝试的那样工作。虽然我不确定他们为什么允许此参数作为方法参数(我认为它有效但不起作用)
关于替代选项,你可以试试这个,
public ActionResult Test(int i)
{
var rangeAttr = new RangeAttribute(0, 10);
if(!rangeAttr.IsValid(i))
ModelState.AddModelError(i.ToString(), rangeAttr.FormatErrorMessage("i"));
}
在 mvc 中,最合适的方法是在你的模型中简单地放置一个属性
[Range(0,10)]
public int yourproperty{ get; set; }
阅读此 http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-6
如果超出该范围,您可以创建自己的错误,这会使 IsValid 为假。
所以例如你可以做类似的事情
if(i < 0 || i > 10)
ModelState.AddModelError("Range", "Invalid Range");
我相信这应该有效。