尝试使用ajax将数据发送回我的save方法时遇到问题。我想这样做,因为我通过使用相同的保存功能将其渲染为部分页面,在多个屏幕中重复使用该表单。
我遇到的问题是当我这样做它确实有效并将其发送回我的保存功能,但序列化的Json是在页面加载时生成的,并且没有获得更新的值。我想获取使用ajax发回的更新值,理想情况下无需捕获页面上每个字段的值。
以下是我现在使用的代码,它可以使用模型中列出的原始值发送回我的保存方法
$("#Save").click(function () {
var form = $('#Form');
if (form.valid()) {
var data = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(@Model))';
$.ajax({
url: "/Save",
type: 'POST',
data: JSON.stringify({ modelJson: data }),
contentType: 'application/json',
success: function (result) {
SaveFade();
}
});
}
return false;
});
答案 0 :(得分:0)
首先,请使用延迟的.done
,.fail
和.always
方法,jQuery的$.ajax
方法返回而不是success
。
其次,不要直接在JavaScript中使用Razor方法,因为单引号字符'
可能会导致语法错误。而是使用id关闭隐藏div
中的此数据,例如:
<div id="formData">@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(@Model))</div>
,然后在JavaScript中执行:var data = $('#formData').html();
。这样,您还可以将脚本移动到单独的.js文件中。
回答您的问题,您必须使用ajax将实际表单发送到控制器方法。关闭表单中的所有字段,为表单@using(Html.BeginForm("Method", "Controller", FormMethod.Post, new { id = "myForm" }))
分配id,并使用AJAX发送它:
$("#Save").click(function () {
var form = $('#Form');
if (form.valid()) {
var data = form.serialize();
$.ajax({
url: "/Save", //you can get also action attribute from form using form.attr('action')
type: 'POST',
data: data
}).done(function (result) {
SaveFade();
});
}
return false;
});
关于ASP.NET MVC中表单的好教程:http://blog.michaelckennedy.net/2012/01/20/building-asp-net-mvc-forms-with-razor/