为什么在Javascript函数中通过Ajax调用Razor controller操作调用时不起作用?

为什么在Javascript函数中通过Ajax调用Razor controller操作调用时不起作用?,ajax,asp.net-core,razor,Ajax,Asp.net Core,Razor,我有一个Asp.NetCore Razor应用程序。 我试图通过$ajax()调用我的控制器来调用一个控件操作。 该操作未进入我的控制器。 我觉得javascript函数中我的@Url.Action()的配置方式有问题。 它的形式应该是@Url.Action(ActionName,Controller) 我在devtools窗口控制台中没有看到任何错误。 我做错了什么 这是一个C代码片段,其中包含控制器上的my DeleteCompany操作: public class CompanyContr

我有一个Asp.NetCore Razor应用程序。 我试图通过$ajax()调用我的控制器来调用一个控件操作。 该操作未进入我的控制器。 我觉得javascript函数中我的@Url.Action()的配置方式有问题。 它的形式应该是@Url.Action(ActionName,Controller)

我在devtools窗口控制台中没有看到任何错误。 我做错了什么

这是一个C代码片段,其中包含控制器上的my DeleteCompany操作:

public class CompanyController : BaseController
{
    [HttpPost]
    public async Task<IActionResult> DeleteCompany(Guid companyId)
    {
        // Do some stuff
        return RedirectToAction("Index");
    }
}
<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>
<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>
公共类公司控制器:BaseController
{
[HttpPost]
公共异步任务DeleteCompany(Guid companyId)
{
//做点什么
返回操作(“索引”);
}
}
下面是调用ConfirmDelete()函数的html代码片段:

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

这是我的javascript,用于提示确认并向控制器发出ajax调用:

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

函数ConfirmDelete(companyId,companyName){
var message=“是否确实要删除客户:”.concat(companyName).concat(“?”;
var result=DevExpress.ui.dialog.confirm(消息“确认公司删除”);
result.done(函数(dialogResult){
$.ajax({
url:'@url.Action(“删除公司”、“公司”),
数据:{companyId:companyId},
成功:功能(数据){
//呼叫已成功完成,我们在数据中获得了结果
},
错误:函数(xhr、ajaxOptions、thrownError){
//有些错误,有些向用户显示错误消息并记录错误
警报(xhr.responseText);
}
});
});
};

首先,您应该在ajax中添加
类型:“Post”
,然后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();
}
[HttpPost]
公共异步任务DeleteCompany(Guid companyId)
{
//做点什么
返回Ok();
}