开发者

DateTime that comes from a GET request uses different format than the one that comes from POST

the DateTime that comes from POST is binded correctly (according to my computer's format)

but DateTime values that come from GET doesn't bind correctly, it is using a different format

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)

anybody knows how to fix this?

is this a mvc bug ? (it doesn't consider Culture when binding get requests)


No, it seems it isn't a bug. You can get more details here: MVC DateTime binding with incorrect date format

I've been using the following ModelBinder to solve that problem.

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;
        }
    }
}

Hope it helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜