如何将jQuery $ .ajax()发布请求中的模型发送到MVC控制器方法

rav*_*ran 42 asp.net-mvc jquery asp.net-ajax

在使用以下代码进行自动刷新时,我假设当我发布帖子时,模型会自动发送到控制器:

$.ajax({
    url: '<%=Url.Action("ModelPage")%>',
    type: "POST",
    //data:  ??????
    success: function(result) {
        $("div#updatePane").html(result);
    },

    complete: function() {
    $('form').onsubmit({ preventDefault: function() { } });

    }
});
Run Code Online (Sandbox Code Playgroud)

每次有帖子时,我都需要增加模型中的value属性:

public ActionResult Modelpage(MyModel model)
    {                   
        model.value = model.value + 1;

        return PartialView("ModelPartialView", this.ViewData);
    }
Run Code Online (Sandbox Code Playgroud)

但是当使用jQuery AJAX请求发布页面时,模型不会传递给控制器​​.如何在AJAX请求中发送模型?

Chr*_*s S 49

简单的答案(在MVC 3以后,甚至可能是2)是你不需要做任何特别的事情.

只要您的JSON参数与模型匹配,MVC就足够聪明,可以根据您提供的参数构造新对象.不存在的参数只是默认值.

例如,Javascript:

var values = 
{
    "Name": "Chris",
    "Color": "Green"
}

$.post("@Url.Action("Update")",values,function(data)
{
    // do stuff;
});
Run Code Online (Sandbox Code Playgroud)

该模型:

public class UserModel
{
     public string Name { get;set; }
     public string Color { get;set; }
     public IEnumerable<string> Contacts { get;set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public ActionResult Update(UserModel model)
{
     // do something with the model

     return Json(new { success = true });
}
Run Code Online (Sandbox Code Playgroud)


Lav*_*iak 25

如果需要将FULL模型发送到控制器,首先需要将模型用于您的javascript代码.

在我们的应用程序中,我们使用扩展方法执行此操作:

public static class JsonExtensions
{
    public static string ToJson(this Object obj)
    {
        return new JavaScriptSerializer().Serialize(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

在视图中,我们使用它来渲染模型:

<script type="javascript">
  var model = <%= Model.ToJson() %>
</script>
Run Code Online (Sandbox Code Playgroud)

然后,您可以将模型变量传递到$ .ajax调用中.

  • 这很好,但是没用,如果你在页面上更改模型渲染模型,如果你在页面上修改它(我认为在网页上是正常的)你将空模型传递给post动作. (2认同)

raj*_*lai 2

我认为您需要显式传递数据属性。一种方法是使用 data = $('#your-form-id').serialize();

这篇文章可能会有所帮助。 使用 jquery 和 ajax 发布

看看这里的文档.. Ajax 序列化

  • 当您在接受适当模型的操作上使用 form.serialize() 时,映射会自动完成。因此,在您的情况下,当您发出此请求时,“MyModel”实例将填充表单值。 (2认同)