2012-02-07 92 views
1

我的型號字段接受數字和空字符串: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。我只需要能夠傳遞空字符串。當忽略正則表達式屬性時,同樣的問題,所以它不是正則表達式。謝謝!

回答

0

嘗試添加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; } 
} 
0

我看不到您在視圖中顯示錯誤消息。所以這可能會導致這個問題,儘管我不確定。反正試試這個,看看它的工作原理:

<%= 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) %> 
+0

這並沒有幫助。這是爲了調試目的嗎? – mishap 2012-02-07 23:08:14

+0

否如果模型屬性上的正則表達式失敗,則框架內置的方式可以顯示錯誤消息。如果您希望客戶端驗證能夠正常工作,那麼您可能應該包含這些信息在未標記爲必需的字段上也應該有空字符串。您的模型中是否有任何其他屬性未由您的視圖正確設置?這會導致模型狀態無效。 – 2012-02-07 23:14:02