Почему мой вызов действия контроллера Razor не работает при вызове через Ajax в функции Javascript?

У меня есть приложение Asp.NetCore Razor. Я пытаюсь вызвать свой контроллер через $ajax(), чтобы вызвать действие контроллера. Действие не попадает в мой контроллер. Я чувствую, что есть проблема с тем, как настроен мой @Url.Action() в функции javascript. Он должен иметь вид @Url.Action(ActionName, Controller).

Я не вижу никаких ошибок в оконной консоли devtools. Что я здесь делаю неправильно?

Вот фрагмент кода C#, содержащий мое действие DeleteCompany на контроллере:

public class CompanyController : BaseController
{
    [HttpPost]
    public async Task<IActionResult> DeleteCompany(Guid companyId)
    {
        // Do some stuff
        return RedirectToAction("Index");
    }
}

Вот мой фрагмент html, в котором вызывается функция ConfirmDelete():

<text>
    <input type="hidden" value="<%- data.CompanyId %>" name="CompanyId" />
    <input type="image" value="<%- data.CompanyId %>" src="/icon/close.png" width="25" height="25" 
           onclick="ConfirmDelete('<%- data.CompanyId %>', '<%- data.CompanyName %>')"/>
</text>

Вот мой javascript для запроса подтверждения и вызова контроллера ajax:

<script>
function ConfirmDelete(companyId, companyName) {
    var message = "<i>Are you sure you want to delete Customer: ".concat(companyName).concat("?");
    var result = DevExpress.ui.dialog.confirm(message, "Confirm Company Delete");
    result.done(function (dialogResult) {
        $.ajax({
          url: '@Url.Action("DeleteCompany","Company")',
          data: { companyId: companyId },
          success: function(data) {
            //call is successfully completed and we got result in data
          },
          error:function (xhr, ajaxOptions, thrownError) {
                          //some errror, some show err msg to user and log the error
                          alert(xhr.responseText);
          }
        });
    });
};
</script>

person JohnB    schedule 12.05.2021    source источник


Ответы (1)


Сначала вы должны добавить type:"Post" в свой ajax, тогда ajax не поддерживает перенаправление, вы должны перенаправить в функцию успеха Ajax.

Вы можете изменить свой код, как показано ниже.

 $.ajax({
      url: '@Url.Action("DeleteCompany","Company")',
      data: { companyId: companyId },
      type:"Post",
      success: function() {
       location.href = '@Url.Action("Index","Company")'
      },
      error:function (xhr, ajaxOptions, thrownError) {
                      //some errror, some show err msg to user and log the error
                      alert(xhr.responseText);
      }
    });

Затем в вашем действии:

[HttpPost]
public async Task<IActionResult> DeleteCompany(Guid companyId)
{
    // Do some stuff
     return Ok();
}
person Yinqiu    schedule 13.05.2021