2015-04-01 47 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