Asp.net 对于空字符串字段,ModelState.IsValid为false

Asp.net 对于空字符串字段,ModelState.IsValid为false,asp.net,asp.net-mvc-2,Asp.net,Asp.net Mvc 2,接受数字和空字符串的“我的模型”字段: [DisplayName("Height")] [RegularExpression (@"^\d*$", ErrorMessage="Height must be a number or left out blank")] public string Height { get; set; } [DisplayName("Width")] [RegularExpression(@"^\d*$", ErrorMessage = "Height must

接受数字和空字符串的“我的模型”字段:

[DisplayName("Height")]
[RegularExpression (@"^\d*$", ErrorMessage="Height must be a number or left out   blank")]
public string Height { get; set; }

[DisplayName("Width")]
[RegularExpression(@"^\d*$", ErrorMessage = "Height must be a number or left out blank")]
public string Width { get; set; }
我的看法是:

<%= Html.LabelFor(x => x.Width) %>:
<%= Html.TextBoxFor(x => x.Width) %>

<%= Html.LabelFor(x => x.Height) %>:
<%= Html.TextBoxFor(x => x.Height) %>

当我提供空文本框时,Model.Width和.Height作为null传递,ModelState.IsValid为false。我只需要能够传递空字符串。当省略regex属性时,同样存在问题,因此它不是regex。谢谢大家!

我看不到您在视图中显示错误消息。所以这可能是问题的原因,尽管我不确定。无论如何,试试这个,看看它是否有效:

<%= Html.LabelFor(x => x.Width) %>:
<%= Html.TextBoxFor(x => x.Width) %>
<%= Html.ValidationMessageFor(x => x.Width) %>

<%= Html.LabelFor(x => x.Height) %>:
<%= Html.TextBoxFor(x => x.Height) %>
<%= Html.ValidationMessageFor(x => x.Height) %>
x.Width)%>:
x、 宽度)%%>
x、 宽度)%%>
x、 高度)%>:
x、 高度)%%>
x、 高度)%%>

尝试将
DisplayFormat
属性添加到模型的属性中:

[DisplayFormat(ConvertEmptyStringToNull = false)]
[DisplayName("Height")]
[RegularExpression (@"^\d*$", ErrorMessage="Height must be a number or left out   blank")]
public string Height { get; set; }

[DisplayFormat(ConvertEmptyStringToNull = false)]
[DisplayName("Width")]
[RegularExpression(@"^\d*$", ErrorMessage = "Height must be a number or left out blank")]
public string Width { get; set; }
这将确保空文本框值不会转换为NULL

或者,您可以显式定义getter和setter以将null转换为空字符串:

private string _width;
public string Width
{
    get { return _width ?? string.Empty; }
    set { _width = value ?? string.Empty; }
} 

这没用。这是为了调试目的吗?不是。如果模型属性上的正则表达式失败,框架会以内置方式显示错误消息。如果希望客户端验证正常工作,您可能应该包括。在未标记为必需的字段上使用空字符串也应该有效。模型上是否存在视图未正确设置的其他属性?这将导致模型状态无效。
private string _width;
public string Width
{
    get { return _width ?? string.Empty; }
    set { _width = value ?? string.Empty; }
}