比方说,我创建了一个属性为int?
类型的模型。MVC4模型绑定和int /十进制溢出
public class MyModel
{
[Range(-100, 100, ErrorMessage="Too large")]
public int? MyValue { get; set; }
}
在视图中,我使用它作为表单中的文本框发回服务器。
@using (Html.BeginForm())
{
<p>Enter some value</p>
<div>@Html.TextBoxFor(m => m.MyValue)</div>
<div>@Html.ValidationMessageFor(m => m.MyValue)</div>
<input type="submit" value="Submit" />
}
这里是控制器代码
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyModel();
return View(model);
}
[HttpPost]
public ActionResult Index(MyModel model)
{
return View(model);
}
}
现在,如果我在文本框中输入一个非常大的数字,e.g 111111111111111111111111111111111111111111111111111111111111111111111111111111
,这是肯定的过大的整数数据类型。在回帖后,得到消息The value '111111111111111111111111111111111111111111111111111111111111111111111111111111' is invalid.
但我没有办法使用我在我的模型中定义的错误消息(本地化等)。
除非您正在进行一些客户端验证,否则您的用户可以轻松地在文本框中输入'abcdefg'。你应该在你的控制器上检查'ModelState.IsValid',并处理一个输出给用户的错误。但是,真的,你应该做一些客户端,也许只允许在文本框中的数字,并设置一个上限? – James 2015-04-01 14:45:23
是的,模型状态肯定无效。这只是我的测试代码,无论如何我都忽略了它。 – hardywang 2015-04-01 15:24:29
由于您输入的值超出了'int'的范围,因此首先生成“..is invalid”错误(在您的范围验证之前) – 2015-04-02 00:14:48