将空字符串作为nullable int属性传递

时间:2012-02-04 01:08:58

标签: asp.net asp.net-mvc

我的模特:

[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为false,但我需要空字符串作为有效输入,以便传递 nulls 并且ModelState.IsValid将为true。我可以在视图中添加什么来添加此逻辑?或许还有其他解决方案?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

int?Nullable<int>)将永远无法接受空字符串。空字符串既不是null也不是int值(这是Nullable<int>的要求)。

如果要拦截此行为,可以通过实现IModelBinder或子类DefaultModelBinder来设计自己的自定义模型绑定器。这样做,您可以设置一个等于null的空字符串值(或一些幻数,但我更喜欢null)。

答案 1 :(得分:0)

有一些解决方法,例如在ViewModel上使用字符串属性并使用RegEx验证器来确保它是一个数字。正则表达式不应该触发空输入。然后当你从ViewModel转到Model时,你必须对字符串值做一个条件,如

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