我使用ajax提交表单。表单包含两个表和多个输入。表单ID为frmCreateRate
。 dataTable1
和dataTable2
工作正常。我想提交frmCreateRate
以及dataTable1
和dataTable2
。我尝试使用此代码,但它显示null值。这是代码:
$.ajax({
type: 'POST',
url: "/Rate/CreateRate",
contentType: 'application/json',
data: JSON.stringify({Observations:dataTable2, Summary: dataTable1, Input: $('#frmCreateRate').serialize()}),
dataType: "json",
});
控制器:
public ActionResult CreateRate(List<Observations> Observations, List<Summaries> Summary, StaffDomain Input)
{
//Codes
}
我尝试只使用dataTable1
和dataTable2
,两个表中的值都会在控制器中捕获。但是当我添加另一个frmCreateRate
参数时,它会显示空值。
更新
以下是控制器内的一些代码:
public ActionResult CreateRate(List<Observations> Observations, List<Summaries> Summary, StaffDomain Input)
{
var domain = new StaffRecord
{
Diagnosis = Input.Diagnosis,
Code = Input.Code,
Time = Input.Time,
Date = Input.Date,
Department = Input.Department,
STaffInformed = Input.STaffInformed,
TimeArrived = Input.TimeArrived,
};
db.StaffRecords.Add(domain);
db.SaveChanges();
return RedirectToAction("List");
}
答案 0 :(得分:0)
serialize()
函数用于将表单作为标准application/x-www-form-urlencoded
MIME提交,如下所示:
single=MySingleValue&check=checkboxValue&radio=radioValue
您正在发送application/json
MIME,因此您必须将表单值逐个添加到JSON对象,就像使用dataTable2
和dataTable1
一样。强烈建议不要在一个参数中发送复杂对象。但是,如果您希望忽略该建议并继续使用当前设计,则可以自动执行表单序列化,而不是逐个添加值。为此,您可以使用serializeArray()
函数和辅助方法。
serializeArray()
将表单元素序列化为名称和值的数组,如下所示:
[
{
name: "textbox1",
value: "1"
},
{
name: "textbox2",
value: "2"
},
{
name: "textbox3",
value: "3"
}
]
要将其转换为JSON对象,可以使用此辅助方法:
function serializeFormToJson(selector) {
var formArray = $(selector).serializeArray();
var json = {};
for (var i = 0; i < formArray.length; i++) {
json[formArray[i]['name']] = formArray[i]['value'];
}
return json;
}
现在您可以将Ajax调用更改为:
$.ajax({
type: 'POST',
url: "/Rate/CreateRate",
contentType: 'application/json',
data: JSON.stringify({Observations: dataTable2, Summary: dataTable1, Input: serializeFormToJson("#frmCreateRate")}),
dataType: "json",
});