asp.net-mvc – 将JSON格式的DateTime传递给ASP.NET MVC

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 将JSON格式的DateTime传递给ASP.NET MVC前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们知道MVC以这种格式返回JsonResult的DateTime:/ Date(1240718400000)/,我们知道如何在JS中解析它.

但是,似乎MVC不接受以这种方式发送的DateTime参数.例如,我有以下操作.

[HttpGet]
public ViewResult Detail(BookDetail details) { //... }

BookDetail类包含一个名为CreateDate的DateTime字段,我以这种格式从JS传递了一个JSON对象:

{"CreateDate": "/Date(1319144453250)/"}

CreateDate被识别为null.

如果我以这种方式传递JSON,它的工作原理如下:

{"CreateDate": "2011-10-10"}

问题是我不能以简单的方式改变客户端代码,必须坚持/ Date(1319144453250)/这种格式.我必须在服务器端进行更改.

如何解决这个问题?这与ModelBinder有什么关系吗?

非常感谢!

解决方法

您怀疑的问题是模型绑定问题.

解决它,创建一个自定义类型,让我们称之为JsonDateTime.因为DateTime是一个结构体,你不能继承它,所以创建下面的类:

public class JsonDateTime
{
    public JsonDateTime(DateTime dateTime)
    {
        _dateTime = dateTime;
    }

    private DateTime _dateTime;

    public DateTime Value
    {
        get { return _dateTime; }
        set { _dateTime = value; }
    }
}

将CreateDate更改为此类型.接下来,我们需要一个自定义模型binder,如下所示:

public class JsonDateTimeModelBinder : IModelBinder  
{ 
    public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) 
    { 
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).ToString(); 
        return new DateTime(Int64.Parse(
            value.Substring(6).Replace(")/",String.Empty))); // "borrowed" from skolima's answer
    }
}

然后,在Global.asax.cs中,在Application_Start中,注册您的自定义ModelBinder:

ModelBinders.Binders.Add(typeof(JsonDateTime),new JsonDateTimeModelBinder());

猜你在找的asp.Net相关文章