アクションがあり、パラメータを簡単にチェックしたい
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がfalseになる可能性があります。
たとえば、次のようなことができます
if(i < 0 || i > 10)
ModelState.AddModelError("Range", "Invalid Range");
私はそれがうまくいくはずだと信じています。