2015-04-01 27 views
1

比方说,我创建了一个属性为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.

但我没有办法使用我在我的模型中定义的错误消息(本地化等)。

+0

除非您正在进行一些客户端验证,否则您的用户可以轻松地在文本框中输入'abcdefg'。你应该在你的控制器上检查'ModelState.IsValid',并处理一个输出给用户的错误。但是,真的,你应该做一些客户端,也许只允许在文本框中的数字,并设置一个上限? – James 2015-04-01 14:45:23

+0

是的,模型状态肯定无效。这只是我的测试代码,无论如何我都忽略了它。 – hardywang 2015-04-01 15:24:29

+0

由于您输入的值超出了'int'的范围,因此首先生成“..is invalid”错误(在您的范围验证之前) – 2015-04-02 00:14:48

回答

1
using System.ComponentModel.DataAnnotations; 
    public class MyModel 
{ 
    [Range(int.MinValue, int.MaxValue)] 
    public int? MyValue {get; set; } 
} 

这应该做的伎俩。

+0

我更新了原始问题并提供了更多详细信息。 – hardywang 2015-04-01 15:24:51