使用ajax调用后从控制器返回的数据

时间:2018-09-19 15:06:21

标签: jquery ajax asp.net-mvc

我有以下Ajax呼叫:

$.ajax({
  url: '@Url.Action("DeleteUser", "Tribes")',
  dataType: "json",
  type: "Post",
  data: {
    "tribeId": tribeId,
    "buId": buId,
    "userId": userId
  },
  success: function(data) {
    if (data.status === "success") {
      $.smallBox({
        title: "<strong>User Deleted</strong>",
        content: "<i class='fa fa-clock-o'></i> <i>Tribe user was successfully deleted! <strong></strong></i>",
        color: "#659265",
        iconSmall: "fa fa-check fa-2x fadeInRight animated",
        timeout: 4000
      },
      function(data) {
        window.location.href = '@Url.Action("ViewTribeUsers", "Tribes", new 
        { 
          tribeId = data.tribeId, 
          buId = data.buId 
        })';
      });
    }
  }
});

我的控制器如下:

public ActionResult DeleteUser(int tribeId, int buId, string userId)
{
  clsTribes.DeleteTribeUsers(tribeId, userId);
  return Json(new 
  { 
    status = "success", 
    tribeId = tribeId, 
    buId = buId 
  }, JsonRequestBehavior.AllowGet);
}

如何在AJAX调用后使用data.[variables]?在这种情况下,我得到的错误是关于数据的。此行中的[变量]:

 window.location.href = '@Url.Action("ViewTribeUsers", "Tribes", new 
 { 
   tribeId = data.tribeId, 
   buId = data.buId 
 })';
  

错误:名称“数据”在当前上下文中不存在

我相信它必须很简单,任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是因为const mapStateToProps = state => { return { services: state.services, }; }; export default connect( mapStateToProps, mapDispatchToProps )(ServicesOverview);是客户端JS变量,您不能在服务器端C#代码中使用它。

一种可能的解决方法是使用data来构建基本URL,然后将Url.Action中的属性附加到其上,如下所示:

data

这样做的缺点是您将无法获得为此URL进行路由的好处。维护路由也变得更加困难,因为如果您更改路由模式,则需要记住更新此JS逻辑。