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がfalseになる可能性があります。

たとえば、次のようなことができます

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

私はそれがうまくいくはずだと信じています。

于 2012-06-11T10:10:18.963 に答える