我可以将html.raw中的JSON模型发布到控制器吗?

时间:2015-01-22 17:56:30

标签: ajax asp.net-mvc json

我有一个模型,我传递给视图并使用Html.Raw将其编码为JSON对象:

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

在页面上,我从页面中的字段填写模型的各个部分:

 model.ProductId = $("#txtProductId").val();

然后尝试使用ajax将其发布到控制器:

 $.ajax({
   type: 'POST',
   url: '@Utl.Action("AddProducts"),
   data: JSON.stringify(model),
   dataType: 'json',
     //etc

但它永远不会进入控制器方法:

 [HttpPost]
 public ActionResult AddProducts(ProductModel, model)
 {
       //do stuff with the model data
 }

任何人都可以帮助我解释我如何改变模型发布的内容吗?

我的模型,简化:

 public class OrderModel {
    public ProductModel Product {get;set;}
    public PersonModel Person {get;set;}
    public List<ProductModel> Products {get;set;}
 }

 public class ProductModel {
    public string Partno {get;set;}
    public int Quantity {get;set;}
      /// etc
  }

  public class PersonModel {
     public string Surname {get;set;}
     public string GivenName {get;set;}
     public string Address {get;set;}
       /// etc
  }

1 个答案:

答案 0 :(得分:3)

将代码更改为

$.ajax({
   type: 'POST',
   url: '@Url.Action("AddProducts")',
   data: model, // not stringified
   dataType: 'json',
   ....

$.post('@Url.Action("AddProducts")', model, function(data) {
  // do stuff with returned data
});

将发回

[HttpPost]
public ActionResult AddProducts(ProductModel model)
{
   //do stuff with the model data
}

假设您视图中的模型为ProductModel

但是,如果您只想回发表单,则可以使用var model = $('form').serialize();而不是手动设置对象的属性。