asp.net-mvc – ASP.Net MVC:发送JSON到控制器
|
在ASP.Net MVC中发布给我的控制器时,我想要发送 JSON,而不是标准的QueryStrings.我有前端的东西工作正常(建立然后提交我的JSON对象). 问题出在控制器方面,MVC框架附带的默认ModelBinders不支持这一点. 我已经看到了一些方法,其中之一是应用一个将对象作为参数的过滤器,使用JSON库对其进行序列化,并将其添加到操作参数中.这不是理想的 另一个更好的方法是使用自定义的模型粘合剂.我所看到的所有这些都假设你将只有一个模型,它将是一个类而不是一个变量.如果你有多个它会分解. 有没有人遇到过这个?我有一个想法是,如果我可以简单地覆盖MVC如何处理FormCollection并在那里截取,将值添加到自己的集合中,并希望MVC能够以正常的方式执行其余操作.有人知道这是否可行? 我认为的关键问题是,我的问题并不具有约束力,因为我的观点模型与之前的方式没有什么不同.问题是从JSON Post获取值. 如果我是正确的MVC get是QueryString中的值,并将其放入表单集合中,然后将其用于ModelBinding.那么正确的方法是不是要改变FormCollection的分配方式呢? 举例说明: public ActionResult MyFirstAction(Int32 ID,PersonObject Person,ClassObject ClassDetails)
{
//etc
}
正常的绑定工作,JSON并不是所有的模型绑定器的例子也不会工作.到目前为止,我的最佳解决方案是将对象转换为字典,并循环遍历每个参数并进行匹配.似乎不理想 解决方法我使用json这样的自定义模型binder:public class JsonModelBinder<T> : IModelBinder {
private string key;
public JsonModelBinder(string requestKey) {
this.key = requestKey;
}
public object BindModel(ControllerContext controllerContext,...) {
var json = controllerContext.HttpContext.Request[key];
return new JsonSerializer().Deserialize<T>(json);
}
}
然后将它连接在Global.asax.cs中,如下所示: ModelBinders.Binders.Add(
typeof(Product),new JsonModelBinder<Product>("ProductJson"));
您可以在这里阅读更多:Inheritance is Evil: The Epic Fail of the DataAnnotationsModelBinder 编辑 控制器操作参数JsonModelBinder应该用作“仅产品”. Int32和ClassObject应该回到DefaultModelBinder.你有不同的结果吗? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – RegisterForEventValidation只能在渲染过程中调
- asp.net-mvc – asp.net MVC antiorgerytoken异常RedirectT
- 如何在ASP.NET GridView中找到控件的客户端ID?
- asp.net-mvc-3 – 使用Ninject获取对象的实例
- asp.net – 如何在asp标签中将文本与中心对齐
- asp.net-mvc – 使用OWIN的Google身份验证Oauth在MVC5中没有
- 自动填充 – 带下拉建议的文本框
- 如何让asp.net不自动转换URL中的转义斜杠?
- asp.net – 在web用户控件中传递int数组作为参数
- asp.net-mvc – 如何在Ajax窗体的asp.net mvc中提交下拉列表
