ASP.NET MVC:JsonResult方法是否需要Bind属性?

时间:2009-04-21 01:29:38

标签: asp.net-mvc

我明白这个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) {..}

       }
     }
  });

4 个答案:

答案 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)

问题是参数变量名称与对象中的变量名称相同(但以小写形式)。