如何从局部视图执行Ajax调用。 Asp.net MVC

时间:2019-03-14 09:51:24

标签: json ajax asp.net-mvc

我想执行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);
}

1 个答案:

答案 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);
}

如果您有更好的解决方案或有任何评论需要,请放心。我愿意接受建议。