我有一个部分视图(表单),我在模式弹出窗口中显示。在提交时,它将创建一个新的数据库条目。这需要通过ajax调用来完成。如何传递ajax调用中的所有表单字段?我正在使用MVC4。
我尝试了$('form')。serialize(),但是这会导致错误无效的JSON原语。我做错了什么?
var dataToSend = $('form').serialize();
$.ajax({
url: urlForSaving,
data: dataToSend,
cache: false,
type: 'POST',
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (data, status) {
},
error: function (xhr, ajaxOptions, thrownError) { alert('error') }
});
控制器
[HttpPost]
public JsonResult Add(SomeModel model)
{
if (ModelState.IsValid)
{
RedirectToAction("Index");
}
return Json(new {
Success = false,
Message = "Validation Errors"
});
}
答案 0 :(得分:1)
您应该将字段值添加到对象中,然后将该对象传递给将在您所需的事件中调用的函数。
var dataToSend = {
fieldname: $("FIELDCLASS OR ID").val();
};
function tocall(){
$.ajax({
url: urlForSaving,
data: JSON.stringify(obj:dataToSend),
cache: false,
type: 'POST',
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (data, status) {
},
error: function (xhr, ajaxOptions, thrownError) { alert('error') }
});
};
答案 1 :(得分:1)
从MVC3起,我认为在局部视图中使用Ajax.BeginForm是理想的情况(与Http.BeginForm相关)。 Ajax版本会自动连接所有内容,包括通过ajax发布的表单。