来自GET请求的DateTime使用的格式与来自POST的格式不同

Omu*_*Omu 1 asp.net asp.net-mvc

来自POST的DateTime正确绑定(根据我的计算机格式)

但来自GET的DateTime值无法正确绑定,它使用的格式不同

my format is dd.MM.yyyy, in GET it uses MM.dd.yyyy instead

I don't have this problem if I use the en-US format  (which is MM/dd/yyyy)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

这是一个mvc bug吗?(绑定获取请求时不考虑Culture)

CGK*_*CGK 8

不,它似乎不是一个bug.您可以在此处获取更多详细信息:MVC DateTime绑定具有不正确的日期格式

我一直在使用以下ModelBinder来解决这个问题.

public class CurrentCultureDateTimeBinder : IModelBinder
{
    private const string PARSE_ERROR = "\"{0}\" is not a valid date";
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        ValueProviderResult valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        if (valueProviderResult == null) return null;

        var date = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;

        if (String.IsNullOrEmpty(date))
            return null;

        bindingContext.ModelState.SetModelValue(bindingContext.ModelName, bindingContext.ValueProvider.GetValue(bindingContext.ModelName));

        try
        {
            return DateTime.Parse(date);
        }
        catch (Exception)
        {
            bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format(PARSE_ERROR, bindingContext.ModelName));
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • @Omu它的工作原理是因为DateTime.Parse(String)使用当前的线程文化(使绑定器文化识别).相反,默认绑定器使用CultureInfo.InvariantCulture.您可以在此处查看更多详细信息:http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx (2认同)