使用Jquery Ajax将Model从视图传递到控制器
我试图通过使用ajax JQuery
将我的模型值从View传递给Controller。 在我的控制器中,该模型显示为null
。
控制器已经从ajax方法调用,但问题是控制器中的对象显示为null
。
这是简单的模型结构:
public class Invoice { public Invoice(InvoiceHeader invHeader, List InvItmem) { this.invHeader = invHeader; this.InvItmem = InvItmem; } public InvoiceHeader invHeader { get; private set; } public List InvItmem { get; private set; } }
这是Controller的结构:
[HttpPost] public ActionResult InsertItems(List invoice) { //List asd = new List(); //asd = invoice.(); return Json(true, JsonRequestBehavior.AllowGet); }
这是视图:
@model BeetaTechModel.Invoice @{ ViewBag.Title = "Index"; var val = Json.Encode(Model); } Index
$(document).ready(function () { $("#btnSubmit").click(function () { // var val = Json.Encode(Model); var check = @Html.Raw(val); $.ajax({ type: 'POST', url: "Invoice/InsertItems", data: '{info:' + JSON.stringify(check) + '}' , contentType: 'application/json; charset=utf-8', dataType: "json", success: function (data) { alert(data); } }); }); }); @{Html.RenderPartial("InvoiceHeader", Model.invHeader);} @{Html.RenderPartial("InvoiceItems", Model.InvItmem);}
您的代码有4个问题。
-
第一个是在你的AJAX调用中,它必须如下所示:
$.ajax({ url: 'Invoice/InsertItems', type: 'POST', data: JSON.stringify(check), contentType: 'application/json; charset=utf-8', success: function (data) { alert(data); } });
-
第二个问题是您订阅了提交按钮的
.click
事件而未取消此按钮的默认操作。 因此,如果此按钮位于表单内,当您单击它时,浏览器会将表单POST到服务器并重定向到表单的操作,从而不会让您的AJAX调用执行。 因此,请确保取消按钮的默认操作:$("#btnSubmit").click(function (e) { e.preventDefault(); ... your AJAX call comes here });
-
第三个问题是您的
Invoice
模型没有默认(无参数)构造函数,这意味着您不能在不编写自定义模型绑定器的情况下将其用作控制器操作的参数,因为默认模型绑定器不知道如何实例化它。 -
第四个问题是
Invoice
模型的invHeader
和InvItmem
属性都没有公共setter,这意味着JSON序列化程序将无法设置它们的值。 因此,请确保您已修复了发票模型:public class Invoice { public InvoiceHeader InvHeader { get; set; } public List
InvItmem { get; set; } }
-
data: '{info:'
与型号名称不匹配:public ActionResult InsertItems(List
invoice) - 可能你需要默认的构造函数来进行正确的反序列化。
- 检查您的ajax数据是否可以在
List
反序列化
- 如何在MVC中使用JQUERY AJAX将viewmodel发布到action方法
- 表单提交后ASP.net MVC成功提醒
- TypeError:undefined不是jqGrid中的函数
- jqgrid rowobject值未定义
- 必需的字段validation器不适用于JQuery选择的下拉列表
- 使用fnServerParams将数据发送到服务器,使用jquery DataTable的aoData在MVC4中不起作用
- X-Frame-Options拒绝加载:“http://test.test.net/Feedback/Create?appId=TestApp”不允许使用MVC5进行跨源框架
- 部分视图在Jquery Ajax Post之后刷新
- 如何在一个ajax调用中将多个数组传递给控制器方法ASP.net MVC 4