如何在MVC中使用JQUERY AJAX将viewmodel发布到action方法
我想使用$ .POST或$ .AJAX实现create(INSERT)屏幕。
注意:代码工作正常,没有AJAX调用..已经存在..现在我需要做ajax调用并保存而不回发。 我在下面写了代码:
提交点击事件以下是代码:
$.ajax( { url: '@Url.Action("CreateProduct","ProductManagement")', dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'post', data: $('frm').serialize(), success: function () { alert('s'); }, error: function (e1, e2, e3) { alert(e2); alert(e1 + ' ' + e2 + ' ' + e3); alert('failure event'); } } ); });
在服务器端:
[HttpPost] public JsonResult CreateProduct(FormCollection frm) { manager.ProductManager m = new manager.ProductManager(); // m.InsertProduct(new common.DTO.ProductDTO() { Id = id, ProductName = ProductName, Description = Description, Cost = cost, ProductTypeId = 5 }); return Json("'result':'success'", JsonRequestBehavior.AllowGet); }
问题是,每次调用动作但没有在frm
参数参数上找到数据。 我也试图保持 – 查看模型ProductViewModel vm
作为参数,但它没有工作..只是给我空值。 而且,在ajax电话中,它取得了成功但是。 只是问题在控制器的动作上没有发布。
Html如下:
@using (Html.BeginForm("CreateProduct", "ProductManagement", FormMethod.Post, new { id = "frm" })) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) } @Html.ActionLink("Back to List", "Index")
请指导我这里有什么问题。
谢谢
对于id Selector,您必须使用带有id的“#”。
这将有效:
$.ajax( { url: '@Url.Action("CreateProduct","ProductManagement")', dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'post', data: $('this').serialize(), OR $('#frm').serialize(), <----------------- success: function () { alert('s'); }, error: function (e1, e2, e3) { alert(e2); alert(e1 + ' ' + e2 + ' ' + e3); alert('failure event'); } } );
或试试这个:
var form = $('#frm'); $.ajax({ cache: false, async: true, dataType: 'json', contentType: 'application/json; charset=utf-8', type: "POST", url: form.attr('action'), data: form.serialize(), success: function (data) { alert(data); } });
你忘了添加id selecter:
$.ajax( { url: '@Url.Action("CreateProduct","ProductManagement")', dataType: 'json', contentType: 'application/json; charset=utf-8', type: 'post', data: $('#frm').serialize(), // $('#frm'); success: function () { alert('s'); }, error: function (e1, e2, e3) { alert(e2); alert(e1 + ' ' + e2 + ' ' + e3); alert('failure event'); } } );
如果表单的id是frm
,那么它应该如下引用
data: $("#frm").serialize(),