我的模特:
[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。我可以在视图中添加什么来添加此逻辑?或许还有其他解决方案?非常感谢您的帮助。
答案 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;