我想执行Ajax调用,以将数据从局部视图的表单中获取到控制器,并返回响应消息。
Ajax呼叫
$("#submitContactInfo").on("click", function () {
if ($('#contact-form').valid() === true) {
$.ajax({
url: '@Url.Action("SendEmailAsync", "Home")',
type: "Post",
data: {
"name": Name.value,
"lastName": LastName.value,
"email": Mail.value,
"phone": Mobile.value
},
dataType: "json",
success: function (result) {
if (result.value === "1") {
...
}
else {
...
}
}
});
}
});
我的控制器
[HttpPost]
public async System.Threading.Tasks.Task<ActionResult> SendEmailAsync(string name, string lastname, string email, string phone)
{
var value = 0;
...
return Json(value, JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:0)
我偶然发现的第一件事是@Scripts{}
在部分视图上不起作用,因此我不得不考虑另一种方式。
因此,我创建了一个外部文件,并将其命名为“ custom.js”,并在_Layout.chtml的下面引用了它:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
...
@Scripts.Render("~/Scripts/custom.js")
我注意到的第二件事是,由于我在外部js文件中使用Razor语法,因此Ajax调用中的网址无法正常工作。
所以我将url: '@Url.Action("SendEmailAsync", "Home")',
更改为url: '/Home/SendEmailAsync',
此后,我遇到了500错误,因此我发现,将type: "Post",
更改为type: "Get",
,将dataType: "json",
更改为dataType: "html",
,然后加上contentType: "application/json; charset=utf-8",
离我近一点,因为我遇到了404错误。
所以我转到我的Controller方法并删除了[HTTPPOST]
。
最终Ajax呼叫:
$("#submitContactInfo").on("click", function () {
if ($('#contact-form').valid() === true) {
$.ajax({
url: '/Home/SendEmailAsync',
type: "GET",
data: {
"name": Name.value,
"lastName": LastName.value,
"email": Mail.value,
"phone": Mobile.value
},
contentType: "application/json; charset=utf-8",
dataType: "html",
success: function (result) {
if (result === "1") {
...
}
else {
...
}
}
});
}
});
我的控制器
public async System.Threading.Tasks.Task<ActionResult> SendEmailAsync(string name, string lastname, string email, string phone)
{
var value = 0;
...
return Json(value, JsonRequestBehavior.AllowGet);
}
如果您有更好的解决方案或有任何评论需要,请放心。我愿意接受建议。