2023-02-17 439
我有一个复杂的json对象,它被发送到视图,没有任何问题(如下所示),但是当我通过ajax调用将此数据返回到.NET对象时,我无法计算出序列化. .各个部件的细节如下.
var ObjectA = {
"Name": 1,
"Starting": new Date(1221644506800),
"Timeline": [
{
"StartTime": new Date(1221644506800),
"GoesFor": 200
}
,
{
"StartTime": new Date(1221644506800),
"GoesFor": 100
}
]
};
我不确定该对象如何传递给控制器方法,我在下面的方法下面有这个方法,其中timelines对象镜像使用属性镜像上述js对象.
public JsonResult Save(Timelines person)
我使用的jquery是:
var encoded = $.toJSON(SessionSchedule);
$.ajax({
url: "/Timeline/Save",
type: "POST",
dataType: 'json',
data: encoded,
contentType: "application/json; charset=utf-8",
beforeSend: function() { $("#saveStatus").html("Saving").show(); },
success: function(result) {
alert(result.Result);
$("#saveStatus").html(result.Result).show();
}
});
我已经看到这个问题是类似的,但没有完全相同,因为我不使用表单来操纵数据.
如何通过json传递复杂类型ASP.NET MVC控制器
我还看到了使用’jsonfilter’手动反驳json的引用,但是想知道是否有一种方法是虽然asp.net mvc虽如asp.net mvc?或以这种方式传递数据的最佳实践是什么?
编辑:
此方法不再需要到达MVC 3的到达,因为它将自动处理 – http://weblogs.asp.net/scottgu/archive/2010/07/27/introdute-asp-net-mvc-3 – 预览-1.aspx
您可以使用此ObjectFilter:
public class ObjectFilter : ActionFilterAttribute {
public string Param { get; set; }
public Type RootType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext) {
if ((filterContext.HttpContext.Request.ContentType ?? string.Empty).Contains("application/json")) {
object o =
new DataContractJsonSerializer(RootType).ReadObject(filterContext.HttpContext.Request.InputStream);
filterContext.ActionParameters[Param] = o;
}
}
}
然后,您可以将其应用于您的控制器方法,如:
[ObjectFilter(Param = "postdata", RootType = typeof(ObjectToSerializeTo))]
public JsonResult ControllerMethod(ObjectToSerializeTo postdata) { ... }
所以基本上,如果帖子的内容类型是”application/json”,这将弹出到动作,并将值映射到您指定的类型的对象.
你说”我没有使用表单来操纵数据.”但是你正在做一个帖子.因此,您实际上是使用形式,即使它是空的.
$.ajax的 datatype 告诉jquery服务器将的类型是什么类型返回,而不是您通过的东西.帖子只能通过表格. jQuery 将数据转换为键/值对并将其传递为查询字符串.来自文档:
要发送到服务器的数据.它是
转换为查询字符串,如果不是
已经是一个字符串.它附加到了
获取请求的URL.请参阅ProcessData.
可防止此自动的选项
加工.对象必须是键/值
对.如果值是数组,jQuery
用相同序列化多个值
键i.e. {foo:[“bar1″,”bar2”]}
变成’&foo = bar1&foo = bar2′.
因此:
虽然这个问题的答案很长,但我仍然发布了一个很好的解决方案,我在一段时间内伴随着,它使得将复杂的json发送到ASP.NET MVC 控制器操作使它们是绑定到任何强类型参数的模型.
这个插件支持日期也是如此,因此他们会转换为他们的DateTime对应物而没有问题.
您可以在我的博文我在哪里检查问题并提供完成此操作所需的代码.
您所要做的就是在客户端使用此插件. ajax请求看起来像这样:
$.ajax({
type: "POST",
url: "SomeURL",
data: $.toDictionary(yourComplexJSONobject),
success: function() { ... },
error: function() { ... }
});
但这只是整个问题的一部分.现在我们能够将复杂的JSON返回给服务器,但由于它将是绑定到复杂类型的模型,它可能在属性上具有验证属性,但在该点处可能会失败.我有一个它的解决方案.我的解决方案利用了jQuery Ajax功能,其中结果可以成功或错误(就像上部代码中所示).因此,当验证失败时,error功能会被称为它应该被称为.
以上所述是小编给大家介绍的ASP.NET MVC 如何将JSON对象从视图传到控制器作为参数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/34243.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态