Javascript 当显式定义控制器参数时,默认模型绑定器会崩溃

Javascript 当显式定义控制器参数时,默认模型绑定器会崩溃,javascript,asp.net-mvc-3,Javascript,Asp.net Mvc 3,我正试图找出MVC3中的模型绑定。看看这个例子 以下是控制器代码: public ActionResult Index() { Person person = new Person{ Name = "Test" }; return View(person); } [HttpPost] public string Edit(Person personModel) { return string.Format

我正试图找出MVC3中的模型绑定。看看这个例子

以下是控制器代码:

public ActionResult Index()
    {
        Person person = new Person{ Name = "Test" };

        return View(person);
    }

    [HttpPost]
    public string Edit(Person personModel)
    {
        return string.Format("From server: {0}", personModel.Name);
    }
下面是html/javascript部分:

@model MCV3.Test.Models.Person
<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript">
    $(document).ready(function (){

        var model = @Html.Raw(Json.Encode(Model));

        $.ajax({
            url : "/Person/Edit", 
            type: "Post",
            datatype: "json",
            data :  model, 
            success: function (data) {                   
                $("#result").text(data);                    
            }
        });

    });
</script>
</head>
<body>
    <label id="result"></label>
</body>
</html>
它不再工作了:模型的类型正确,但name属性为null

在有效的示例中,post参数为:

Name    Test

Name=Test
但在不起作用的示例中,它们是:

personModel[Name]   Test

personModel%5BName%5D=Test
如果请求是这样的,MVC似乎无法序列化:
personModel[Name]Test


有没有办法不用编写自定义绑定就解决这个问题?

当MVC绑定尝试创建并填充一个
Person
对象以传递给您的
Edit
操作时,它会尝试查找
Person
对象上所有可设置属性的值;在本例中,
Name
属性。因此,它在表单数据、查询字符串数据(等)中查找具有键“name”的名称-值对。你的工作示例有一个,而你的非工作示例没有


如果您想以这种格式发布数据,您可以创建一个自定义程序来解析数据,并根据找到的内容返回值。

当MVC绑定尝试创建并填充
Person
对象以传递给您的
Edit
操作时,它会尝试查找
Person
对象上所有可设置属性的值;在本例中,
Name
属性。因此,它在表单数据、查询字符串数据(等)中查找具有键“name”的名称-值对。你的工作示例有一个,而你的非工作示例没有


如果你想以这种格式发布数据,你可以创建一个自定义函数来解析数据,并根据找到的数据返回值。

数据:{personModel:model},不是有效的JSON,你应该将它作为数据传递:{“Name”:“Test”},这是传递给person对象的有效JSON字符串。数据:{personModel:model},不是有效的JSON,应将其作为数据传递:{“Name”:“Test”},这是传递给person对象的有效JSON字符串。
personModel[Name]   Test

personModel%5BName%5D=Test