我在绑定QueryString的日期时遇到了一些问题:
public class QueryParms { public DateTime Date { get; set; } }
以及以下控制器操作:
public ActionResult Search( QueryParms query );
如果表格是FormMethod.获取,它不再工作了。日期保留为默认值(01/01/0001)
我认为这是一个文化问题: 当我查看值提供程序时,FormValueProvider为我的日期设置了一个区域性属性:{fr fr}。QueryStringValueProvider未设置区域性属性。
这似乎是出于设计:
http://www.pagedesigners.co.nz/2009/12/asp-net-mvc-datetime-binding-and-culture-unaware-urls/
以及解决方案(来自: CultureInfo issue with Modelbinding double in asp.net-mvc(2)
public class DateTimeModelBinder : IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var culture = GetUserCulture(controllerContext); string value = bindingContext .ValueProvider .GetValue(bindingContext.ModelName) .ConvertTo(typeof(string)) as string; if (string.IsNullOrEmpty(value)) { return null; } return DateTime.Parse(value, culture.DateTimeFormat); } public CultureInfo GetUserCulture(ControllerContext context) { var request = context.HttpContext.Request; if (request.UserLanguages == null || request.UserLanguages.Length == 0) return CultureInfo.CurrentUICulture; return new CultureInfo(request.UserLanguages[0]); } }