ASP.NET MVC2模型验证失败,非美国日期格式
发布时间:2020-12-16 03:51:19 所属栏目:asp.Net 来源:网络整理
导读:我有一个小型的MVC2应用程序,它以两种文化显示:en-US和es-MX.一部分包含用于预先填充模型中当前日期的日期的用户输入. 使用en-US时,日期字段显示为MM / dd / yyyy,可以使用相同的格式更改,而不会导致任何验证错误. 使用es-MX时,日期字段显示为dd / MM / yyy
我有一个小型的MVC2应用程序,它以两种文化显示:en-US和es-MX.一部分包含用于预先填充模型中当前日期的日期的用户输入.
使用en-US时,日期字段显示为MM / dd / yyyy,可以使用相同的格式更改,而不会导致任何验证错误. 使用es-MX时,日期字段显示为dd / MM / yyyy,但是当以此格式编辑日期时,服务器端验证将失败并显示以下消息:
关于该消息的第一件事就是它没有本地化.消息本身(我认为我无法控制)和字段的显示名称(我可以控制并在我的代码中本地化).应该以本地化格式显示. 我已经尝试单步执行代码以查看验证失败的确切位置,但它似乎发生在我看不到的一些已编译的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> 解决方法
以下是我在案例中解决问题的方法.我手动验证控制器中的日期并重置该属性的ModelState:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Save(TestViewModel model) { var tempDate = new DateTime(); var culture = CultureInfo.CurrentUICulture; if(DateTime.TryParse(Request.Form["TheDate"],culture,DateTimeStyles.None,out tempDate)) { model.DateOfBirth = tempDate; ModelState.Remove("TheDate"); } if(ModelState.IsValid) { // <--- Now valid // Do other stuff return this.View("Complete",model); } // Validation failed,model); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 简单的ASP.NET应用程序示例(没有Web窗体和MVC)
- Asp.Net Core API网关Ocelot
- 对ASP.NET Web API的所有请求返回404错误
- asp.net – 我可以在超链接上显式指定NavigateUrl吗?
- asp.net-mvc – 具有MasterPage的视图上的多个AntiForgeryT
- 在asp.net中设置MIME类型
- asp.net – 如何删除特定页面中的cookie?
- 从ASP.NET中的BarCode下面删除文本(C#)
- 关于Expression Tree和IL Emit的所谓的"性能差别"
- Asp.Net Core 获取找回密码的Code提示错误No IUserTokenPro
推荐文章
站长推荐
- ASP.NET MVC 3的jquery ajax表单
- 强制ASP.NET应用程序从bin而不是GAC加载程序集
- asp.net-mvc – 在ASP.NET MVC 1.0中在HTTP和HTT
- asp.net – 在启用了共享配置的IIS 7上安装Web D
- 【DevExpress v17.2新功能预告】DevExtreme ASP.
- asp.net-mvc – ASP.NET MVC表单身份验证和未经身
- asp.net/C#中的请求来源
- asp.net – Mocking HttpContext不起作用
- asp.net-mvc – 构建新的大型ASP.NET MVC2和EF4
- asp.net-mvc – 将index.html设置为默认页面
热点阅读