【问题标题】:When converts ASP.NET values of ValueProvider?何时转换 ValueProvider 的 ASP.NET 值?
【发布时间】:2014-09-30 16:24:10
【问题描述】:

我的项目使用 ASP.NET MVC。

我正在通过 ajax 将一些数据发送到一个看起来像

的控制器动作
{ "data" : { "DATE" : "\/Date(1409097600000)\/", "NAME" : "thomas } }

我使用控制器的ValueProvider来处理数据:

var provider = ControllerContext.Controller.ValueProvider;
var value = provider.GetValue("data.DATE");
// value is now already "27.08.2014 00:00:00" 

为什么?

这部分转换发生在哪里?

类似的问题:-

以上数据为内容类型"application/json; charset=utf=8"

将数据作为"application/x-www-form-urlencoded; charset=utf=8" ASP.NET 无法转换日期值。

 _model.DATE=%5C%2FDate(1409097600000)%5C%2F&_model.NAME=thomas

我认为我在 .NET 日期格式中的 \/ 有问题:\/Date(1409097600000)\/

(我知道 netwonsoft.json 可以作为 javascript 序列化的替代方案,但不幸的是目前还不行)

【问题讨论】:

  • (1409097600000 / 1000) = 1409097600 = unix 时间戳 = 27.08.2014 00:00:00 :)
  • 很好(我并不陌生;))-但我指的是不同的挑战;)

标签: c# asp.net-mvc model-binding


【解决方案1】:

如果您使用 Ajax 帖子将 JSON 数据发送到服务器,则内容类型标头应反映该事实 (Content-Type="application/json; charset=utf=8"),以便服务器解释数据正确。

Content-Type="application/x-www-form-urlencoded; charset=utf=8",用于通过 HTML 表单提交数据。如果您使用此内容类型标头提交 JSON 数据,浏览器将对它进行 url 编码并生成您说明的字符串:

_model.DATE=%5C%2FDate(1409097600000)%5C%2F&_model.NAME=thomas

Date() 函数在 HTTP 表单帖子中没有意义(它是一个 JSON 函数),这就是日期转换失败的原因。

【讨论】:

  • 改变内容类型应该够了吧?不需要改变格式?并不容易 - 不幸的是 ajax-post 是由第三方组件完成的:/
  • 检查您的第 3 方组件的配置选项。如果它正在发送 json 数据,它应该设置标题以反映事实。
猜你喜欢
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 2021-06-20
相关资源
最近更新 更多