如何在ajax post请求中传递模型?

每一个人。 我是asp mvc的新手。 我需要在ajax post请求中将我的模型作为参数传递。

这是我的ajaxpost请求代码:

 $(document).ready(function () { $("#contragentTable tr").click(function () { $.ajax({ type: 'POST', url: "/Contragent/Index", data: $('#form').serialize(), dataType: 'json' }); }); });  

这是模型

 public class ContragentModel { private readonly List contragentList = new List(); public ContragentModel() { this.IsRowSelected = false; } public List ContragentList { get { return this.contragentList; } } public ContragentView SelectedContragent { get; set; } public bool IsRowSelected { get; set; } } 

这些是控制器

 public ActionResult Index() { var contragentModel = new ContragentModel(); var contragentView = new ContragentView(); contragentView.Id = 1; contragentModel.ContragentList.Add(contragentView); return View(contragentModel); } [HttpPost] public ActionResult Index(ContragentModel model) { model.IsRowSelected = true; // Here exception throws, because there no items model.SelectedContragent = model.ContragentList.Single(t=>t.Id== 1); return this.RedirectToAction("Index", model); } 

当我在ajax post请求模型中传递我的模型时model.ContragentList没有项目。 但是在cshtml方面却有。 有人知道为什么吗?

另外,如何在我的ajax请求中传递模型和更多一个int参数?

这是我的观点

 @model Transportation.Models.ContragentModel @{ ViewBag.Title = ""; Layout = "~/Views/Shared/_MainLayout.cshtml"; } @section head{  $(document).ready(function () { $("#contragentTable tr").click(function () { $.ajax({ type: 'POST', url: "/Contragent/Index", data: $('#form').serialize(), dataType: 'json', contentType: 'application/json; charset=utf-8' }); }); });  }  @if (@Model.ContragentList.Count > 0) {  } else {  } 
@Html.ActionLink("some text1", "Index") @Html.ActionLink("some text2", "Index")
No data
@{ var displayStyle = @Model.IsRowSelected ? "" : "none"; var operationTypeGroups = Model.IsRowSelected ? Model.SelectedContragent.PriceList.GroupBy(t => t.OperationTypeId) : null; var operationTypes = operationTypeGroups == null ? null : operationTypeGroups.SelectMany(t => t); @if (operationTypes != null) { foreach (var operationType in operationTypes) { } }
@Html.ActionLink(operationType.OperationTypeName, "Index");
}

请看文章: http : //www.codeproject.com/Articles/678591/CRUD-Operations-using-Partial-V

在本文中,CRUD操作是使用ASP.NET MVC 4 Application中的jQuery AJAX调用执行的。

关于您的代码,您需要修改以下行:

  $("#contragentTable tr").click(function () { var modelDataJSON = '@Html.Raw(Json.Encode(Model))'; $.ajax({ url: "/Contragent/Index", type: 'POST', data: { myObject1: modelDataJSON}, dataType: 'json' }); }); 

您必须在AJAX调用中为对象提供一个名称,它应该与目标控制器操作方法中的参数名称相同,并且因为您要从客户端发送JSON,所以操作方法应该是这样的:

 public ActionResult Index(string myObject1 ) 

然后在内部操作中,您可以反序列化JSON对象并创建模型或您需要的任何处理。