27

我正在用 asp.net mvc 编写应用程序。我有带有动作的控制器,它使用一些 ViewModel 作为参数。如何使用 jquery post 将表单数据发送到该 mvc 控制器。

4

2 回答 2

43
$.post("Yourcontroller/YourAction", { FirstName : $("#txtFirstName").val(), LastName : $("#txtLastName") } ,function(data){
  //do whatever with the response

});

我们传递的 ViewModel 属性名称和参数应该相同。即:您的视图模型应该有 2 个属性,称为FirstNameLastName他的一样

public class PersonViewModel
{
  public string FirstName { set;get;}
  public string LastName { set;get;}
  // other properties

}

你的 Post 操作方法应该接受一个类型的参数PersonViewModel

[HttpPost]
public ActionResult YourAction(PersonViewModel model)
{
  //Now check model.FirstName 
}

或者,如果您的视图是对 PersonViewModel 的强类型,您可以使用 jQuery 方法简单地将序列化的表单发送到 actionserialize方法

$.post("Yourcontroller/YourAction", $("#formId").serialize() ,function(data){
  //do whatever with the response

});

编辑:根据评论

Serialize也会照顾孩子的财产。假设你有一个像这样的名为 Profession 的类

public class Profession
{
    public string ProfessionName { set; get; }
}

你的 PersonViewModel 有一个类型的属性Profession

public class PersonViewModel
{
    //other properties
    public Profession Profession { set; get; }
    public PersonViewModel()
    {
        if (Profession == null)
            Profession = new Profession();
    }
}

如果您从视图中填充这些数据,您将在 HttpPost Action 方法中获得这些数据。

在此处输入图像描述

于 2012-05-29T16:55:35.790 回答
9
var myData = {
              Parameter1: $("#someElementId").val(),
              Parameter2: $("#anotherElementId").val(),
              ListParameter: { /* Define IEnumerable collections as json array as well */}
              // more params here
             }  
$.ajax({
    url: 'someUrl',
    type: 'POST',
    dataType: "json",
    contentType: 'application/json',
    data: JSON.stringify(myData)
});  


[HttpPost]
public JsonResult Create(CustomViewModel vm)
{
    // You can access your ViewModel like a non-ajax call here.
    var passedValue = vm.Parameter1;
}

您还可以序列化整个表单并将其传递给控制器​​的操作方法。在你的ajax调用中:

data: $('form').serialize()
于 2012-05-29T16:47:03.817 回答