加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 22:46:38 所属栏目:asp.Net 来源:网络整理
导读:我们知道MVC以这种格式返回JsonResult的DateTime:/ Date(1240718400000)/,我们知道如何在JS中解析它. 但是,似乎MVC不接受以这种方式发送的DateTime参数.例如,我有以下操作. [HttpGet]public ViewResult Detail(BookDetail details) { //... } BookDetail类
我们知道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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读