我有以下ajax调用:
$.ajax({
url: "@Url.Action("GetMatch", "Test")",
data: {
Name: $("[name='Name']").val(),
Surname: $("[name='Surname']").val(),
Email: $("[name='Email']").val(),
},
dataType: "text",
type: "POST",
success: function (data, textStatus, jqXHR) {
alert(data.length);
if (data.length <= 13){
SaveQuote();
} else {
alert("matche")
}
});
控制器中的GetMatch操作如下:
[HttpPost]
public ActionResult GetClientMatch(ClientBusinessModel contactPerson)
{
*search for a list*
if (list.Count > 0)
{
return PartialView("~/Views/Shared/Partials/_Client.cshtml", list);
} else
return Json(new { data = contactPerson }, JsonRequestBehavior.AllowGet);
}
我要执行的操作是成功,如果列表不为空,则显示部分视图_Client.cshtml。还行吧。 但是如果列表为空,请调用控制器的另一个操作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateClient(SchoolModel school, ClientBusinessModel contactPerson, long QuotationId, long LeadId)
{
*some aciotns*
}
第一件事是如何测试ajax调用行动GetClientMatch时返回的数据是部分View还是contactPerson? 现在,我正在测试数据的长度。 以及如何保存表单数据和第一个ajax调用返回的contactPerson?
我的SaveQuote函数:
function SaveQuote() {
var obj = $('#frmSchool').serialize();
var jsonObj = @Html.Raw(Json.Encode(Model));
$.ajax({
type: "POST",
url: "@Url.Action("CreateClient", "Test")",
data: obj + "
Name: $("[name='Name']").val(),
Surname: $("[name='Surname']").val(),
Email: $("[name='Email']").val(),
success: function (data) {
$('#ProductInformation').html(data);
},
error: function (xhr, status, error) {
alert(error);
}
});
}
当第一个ajax调用返回的列表为空时,如何使用表单数据和contactPerson模型执行控制器操作?
答案 0 :(得分:0)
您无需使用serialize()
来序列化表单,而需要使用serializeArray()
来启用推入其他数据,然后再分配给AJAX回调,如下例所示(请参见相关问题here):
function SaveQuote() {
var obj = $('#frmSchool').serializeArray();
// pushing additional data to existing array
obj.push({ name: "Name", value: $("[name='Name']").val() });
obj.push({ name: "Surname", value: $("[name='Surname']").val() });
obj.push({ name: "Email", value: $("[name='Surname']").val() });
var jsonObj = @Html.Raw(Json.Encode(Model));
$.ajax({
type: "POST",
url: "@Url.Action("CreateClient", "Test")",
data: obj,
success: function (data) {
$('#ProductInformation').html(data);
},
error: function (xhr, status, error) {
alert(error);
}
});
}
此外,如果要检查响应是否返回包含contactPerson
的部分视图或JSON响应,请放置if
条件以检查指定对象键的存在:
控制器
[HttpPost]
public ActionResult GetClientMatch(ClientBusinessModel contactPerson)
{
// *search for a list*
if (list.Count > 0)
{
return PartialView("~/Views/Shared/Partials/_Client.cshtml", list);
}
else
{
// key name intentionally changed for disambiguation
return Json(new { contact = contactPerson }, JsonRequestBehavior.AllowGet);
}
}
jQuery
function SaveQuote() {
var obj = $('#frmSchool').serializeArray();
obj.push({ name: "Name", value: $("[name='Name']").val() });
obj.push({ name: "Surname", value: $("[name='Surname']").val() });
obj.push({ name: "Email", value: $("[name='Surname']").val() });
var jsonObj = @Html.Raw(Json.Encode(Model));
$.ajax({
type: "POST",
url: "@Url.Action("CreateClient", "Test")",
data: obj,
success: function (data) {
// check if contact person exists
if (data.contact == undefined) {
// returns partial view
$('#ProductInformation').html(data);
}
else {
// call another action here, e.g. create client function
createClient(data.contact, ...);
}
},
error: function (xhr, status, error) {
alert(error);
}
});
}
调用另一个操作的方法取决于该操作中设置的操作属性(GET
/ POST
方法)以及随该操作传递的必需参数。