我明白这个Bind属性不是必需的,但没有它就没有绑定JSON类型。我在这里错过了什么?我正在运行RC1。
编辑:
这应该有效:
public JsonResult Index(Person person)
{
do something with person.
}
但除非我这样做,否则它不适用于某些控制器操作:
public JsonResult Index([Bind(Prefix="")]Person person)
{
}
第一个对象是无效的。
jQuery Ajax:
$.ajax({
type: "POST",
url: "/Index/Person",
data: { PersonID: personID, Name: name },
dataType: "json",
success: function(data) {..}
}
}
});
答案 0 :(得分:2)
一般来说,模型绑定不需要Bind属性。但是,您的问题没有为任何人提供足够的细节来判断实际问题是什么。如果您尝试将JSON 发布到服务器,那么这些都不会起作用。默认模型绑定器仅将已发布的表单值绑定到操作方法的参数。
答案 1 :(得分:2)
以下代码适用于我。
另外,只是为了检查,你确定你至少有RC1版本的MVC吗? MVC的早期预览确实需要Bind属性,但在RC1中进行了更改,以使[Bind]属性对于常见情况不具有限制性。有关详细信息,请参阅this post。
Javascript代码:
$(function() {
$("#result").text("Calling Ajax...");
$.ajax({
type: "POST",
url: "/Home/Person",
data: { Name: "Erv Walter", PersonID: "123" },
dataType: "json",
success: function(data) {
$("#result").text(data.Name);
}
});
});
在HTML中使用它:
<div id="result" />
控制器代码:
[AcceptVerbs("POST")]
public JsonResult Person(Person person)
{
person.Name = person.Name.ToUpper();
return Json(person);
}
并且Person类看起来像这样:
public class Person
{
public string Name { get; set; }
public string PersonID { get; set; }
}
答案 2 :(得分:1)
先做一些健全检查。你可能拥有大部分(如果不是全部),但是如果没有更多的代码,我们就会陷入困境:
您的行动中是否有[AcceptVerbs(HttpVerbs.Post)]
过滤器?尝试将Person
标记为[Serializable]
。你的Person
看起来像什么?它有默认构造函数吗?默认构造函数中是否有任何可能导致错误输出的内容?确保您在Person
尝试制作不使用Person
作为参数的操作:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Index(int PersonID, string Name) {}
或者选择FormCollection
并致电UpdateModel()
。
答案 3 :(得分:0)
问题是参数变量名称与对象中的变量名称相同(但以小写形式)。