ModelState.IsValid假为空字符串字段
问题描述:
我的型号字段接受数字和空字符串:ModelState.IsValid假为空字符串字段
[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) %>
在控制器动作:
[HttpPost]
public ActionResult Edit(MyModeltype model)
{
model.Width = String.IsNullOrEmpty(model.Width) ? "" : model.Width; //NEEDED?
model.Height = String.IsNullOrEmpty(model.Height) ? "" : model.Height; //NEEDED?
if (ModelState.IsValid)
SaveSettings(model);
return View("SomeView");
}
当我提供空的文本框,Model.Width和.Height作为空值传递,ModelState.IsValid为false。我只需要能够传递空字符串。当忽略正则表达式属性时,同样的问题,所以它不是正则表达式。谢谢!
答
尝试添加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空转换为空字符串:
private string _width;
public string Width
{
get { return _width ?? string.Empty; }
set { _width = value ?? string.Empty; }
}
答
我看不到您在视图中显示错误消息。所以这可能会导致这个问题,尽管我不确定。反正试试这个,看看它的工作原理:
<%= 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) %>
这并没有帮助。这是为了调试目的吗? – mishap 2012-02-07 23:08:14
否如果模型属性上的正则表达式失败,则框架内置的方式可以显示错误消息。如果您希望客户端验证能够正常工作,那么您可能应该包含这些信息在未标记为必需的字段上也应该有空字符串。您的模型中是否有任何其他属性未由您的视图正确设置?这会导致模型状态无效。 – 2012-02-07 23:14:02