Как выполнить Ajax-вызов из частичного представления.Asp.net MVC - PullRequest
0 голосов
/ 14 марта 2019

Я хочу выполнить Ajax Call, чтобы получить данные из формы, которая находится в частичном представлении, в контроллер и получить ответное сообщение.

Ajax Call

$("#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 голосов
/ 14 марта 2019

Первое, на что я наткнулся, было то, что @Scripts{} не работает с частичными представлениями, поэтому мне пришлось подумать о другом способе.

Итак, я создал внешний файл, назвал его «custom.js» и сослался на него.это на _Layout.chtml, ниже: @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jqueryval") ... @Scripts.Render("~/Scripts/custom.js")

Второе, что я заметил, было то, что URL из Ajax Call не работал, потому что я использовал синтаксис Razor во внешнем js-файле.

Итак, я изменил 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] и все.

Final Ajax Call:

$("#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);
}

Если у вас есть лучшее решение или какие-либо замечания, не стесняйтесь.Я открыт для предложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...