如何在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' }); }); }); } @Html.ActionLink("some text1", "Index") @Html.ActionLink("some text2", "Index") @if (@Model.ContragentList.Count > 0) { } else { 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对象并创建模型或您需要的任何处理。