2012-02-04 70 views
1

我的模型:通空字符串可爲空整型屬性

[DisplayName("Height")] 
public int? Height { get; set; } 

[DisplayName("Width")] 
public int? Width { get; set; } 

查看:

<%= Html.TextBoxFor(x => x.Width) %> 
<%= Html.TextBoxFor(x => x.Height) %> 

操作:

if (ModelState.IsValid) 
    SaveSettings(model); 

當空字符串從視圖中通過,ModelState中是假的,但是我需要空字符串作爲有效輸入,這樣的空值纔會通過nd ModelState.IsValid將爲true。我可以添加到視圖添加這個邏輯?或者也許有其他解決方案?非常感謝您的幫助。

回答

0

有一些解決方法,比如在您的ViewModel上使用字符串屬性並使用RegEx驗證器來確保它是一個數字。正則表達式不應該在空輸入上觸發。然後,當你從ViewModel到Model時,你必須對字符串值做一個條件,如

var m = new Model(); 
m.Property = !String.IsNullOrEmpty(this.Property)? int.parse(this.Property) as int?:null; 
0

int?Nullable<int>)將永遠不能接受空字符串。空串不是nullint值(這是Nullable<int>的要求)。

如果要截取此行爲,可以通過執行IModelBinder或子類DefaultModelBinder來設計自己的自定義模型綁定器。這樣做,你可以設置一個空字符串值等於null(或一些幻數,但我更喜歡null)。