gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:06:20 25 4
gpt4 key购买 nike

我们知道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 相关吗?

提前非常感谢!

最佳答案

正如您所怀疑的,该问题是模型绑定(bind)问题。

要解决这个问题,请创建一个自定义类型,我们将其命名为 JsonDateTime。由于 DateTime 是一个结构体,因此您无法继承它,因此创建以下类:

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

private DateTime _dateTime;

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

将 CreateDate 更改为此类型。接下来,我们需要一个自定义模型绑定(bind)器,如下所示:

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-mvc - 将 JSON 格式的 DateTime 传递给 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com