【发布时间】:2010-01-26 16:35:43
【问题描述】:
当我在 ASP.Net MVC 中向我的控制器发布帖子时,我希望能够发送 JSON 而不是标准 QueryStrings。我的前端工作正常(构建然后提交我的 JSON 对象)。
问题出在控制器端,MVC 框架附带的默认 ModelBinders 不支持这一点。
我已经看到了解决此问题的多种方法,其中之一是应用一个将对象作为参数的过滤器,使用 JSON 库对其进行反序列化,并将其添加到操作参数中。这并不理想。
另一种更好的方法是使用自定义模型绑定器。尽管我所看到的所有模型都假设您只有一个模型,并且这将是一个类而不是一个变量。如果你有多个,它就会崩溃。
有没有其他人遇到过这种情况?我的一个想法是,如果我可以简单地覆盖 MVC 如何处理 FormCollection 并在那里拦截,我自己将值添加到集合中,并希望 MVC 能够以正常的方式完成其余的工作。有谁知道这是否可能?
我认为,关键问题在于我的问题不在于绑定,因为我的视图模型与以前的视图模型没有什么不同。问题是从 JSON Post 获取值。
如果我是正确的,MVC 从 QueryString 中获取值并将其放入表单集合中,然后用于 ModelBinding。那么正确的方法不应该是改变 FormCollection 的分配方式吗?
动作示例:
public ActionResult MyFirstAction(Int32 ID, PersonObject Person, ClassObject ClassDetails)
{
//etc
}
普通绑定有效,JSON 无效,模型绑定器的所有示例也无效。到目前为止,我最好的解决方案是将对象转换为字典并循环遍历每个参数并将其匹配。似乎不太理想。
【问题讨论】:
-
如果你要投反对票,你能解释一下原因吗?
-
对不起,不幸的是,当我点击最喜欢的明星时,我不小心点击了反对票,即使我已经投票了(这就是它从 5 变为 3 的原因)。现在它在试图撤消我不小心做的事情后立即说,改变我的投票为时已晚,除非问题得到编辑。如果您对问题进行编辑,我很乐意修改我的投票。
-
没问题!我也经常遇到这种情况。
-
我不知道发生了什么,但它仍然没有让我修正我的投票。
-
不,没关系。别担心。我真的不介意有人投票给我,只要我知道为什么,结果证明是一个错误。
标签: asp.net-mvc json model-binding