我有一個小型的MVC2應用程序,顯示兩種文化:en-US和es-MX。其中一部分包含一個用戶輸入,用於預先填入模型中當前日期的日期。ASP.NET MVC2模型驗證失敗,非美國日期格式
使用en-US時,日期字段顯示爲MM/dd/yyyy,可以使用相同的格式進行更改,而不會導致任何驗證錯誤。
當使用ES-MX,日期字段顯示爲DD/MM/yyyy的,但是當日期以這種格式被編輯時,服務器端驗證失敗,並在消息:
值'17/05/1991'對於日期無效。
對我而言,跳出來的第一件事就是它沒有本地化。消息本身(我認爲我無法控制)和字段的顯示名稱(我可以控制並在本地代碼中進行本地化)。應該以本地化的格式顯示。
我已經嘗試通過代碼來確切地看到驗證失敗的地方,但它似乎發生在我看不到的一些編譯的MVC或DataAnnotations代碼中。
申請詳情:IIS6,ASP.NET 3.5(C#),MVC 2 RTM
樣品型號代碼:
public class TestVieModel{
[LocalizedDisplayNameDisplayName("TheDateDisplayName", NameResourceType=typeof(Resources.Model.TestViewModel))]
[Required(ErrorMessageResourceName="TheDateValidationMessageRequired", ErrorMessageResourceType=typeof(Resources.Model.TestViewModel))]
[DataType(DataType.Date)]
public DateTime TheDate { get; set; }
}
樣品控制器動作代碼:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(TestViewModel model) {
if(ModelState.IsValid) { // <--- Always is false when using es-MX and a date foramtted as dd/MM/yyyy.
// Do other stuff
return this.View("Complete", model);
}
// Validation failed, redisplay the form.
return this.View("Enter", model);
}
樣品查看代碼:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<HispanicSweeps.Web.Model.LosMets.EnterViewModel>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Test</title>
</head>
<body>
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.TheDate) %>
</div>
<div class="editor-field">
<%= Html.EditorFor(model => model.TheDate) %>
<%= Html.ValidationMessageFor(model => model.TheDate) %>
</div>
<p><input type="submit" value="Save" /></p>
</fieldset>
<% } %>
</body>
</html>