【问题标题】:Redirecting to another page in ASP.NET MVC using JavaScript/jQuery使用 JavaScript/jQuery 重定向到 ASP.NET MVC 中的另一个页面
【发布时间】:2011-12-30 05:20:31
【问题描述】:

我想在 ASP.NET MVC 3.0 中使用 JavaScript/jQuery/Ajax 从一个页面重定向到另一个页面。在按钮单击事件中,我编写了如下 JavaScript 代码。

function foo(id)
{
    $.post('/Branch/Details/' + id);
}

我的控制器代码是这样的:

public ViewResult Details(Guid id)
{
     Branch branch = db.Branches.Single(b => b.Id == id);
     return View(branch);
}

当我点击一个按钮时,它会调用 BranchController 中的详细信息操作,但它不会返回到详细信息视图。

我没有收到任何错误或异常。它在Firebug 中显示状态 200 OK。我的代码有什么问题,如何重定向到详细信息视图页面?

【问题讨论】:

    标签: c# javascript jquery asp.net-mvc


    【解决方案1】:

    您没有在 $.post AJAX 调用中订阅任何成功回调。这意味着请求已执行,但您对结果不做任何事情。如果您想对结果做一些有用的事情,请尝试:

    $.post('/Branch/Details/' + id, function(result) {
        // Do something with the result like for example inject it into
        // some placeholder and update the DOM.
        // This obviously assumes that your controller action returns
        // a partial view otherwise you will break your markup
    });
    

    另一方面,如果你想重定向,你绝对不需要 AJAX。仅当您想留在同一页面上并仅更新其中的一部分时才使用 AJAX。

    所以如果你只想重定向浏览器:

    function foo(id) {
        window.location.href = '/Branch/Details/' + id;
    }
    

    附带说明: 你永远不应该像这样对 URL 进行硬编码。在 ASP.NET MVC 应用程序中处理 url 时,您应该始终使用 url 助手。所以:

    function foo(id) {
        var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
        window.location.href = url.replace('__id__', id);
    }
    

    【讨论】:

    • 谢谢@Darin。我正在使用您建议的 url 帮助程序,但它在页面上出现错误,因为 url 类似于 localhost/… 如何从该帮助程序获取正确的 Url。
    • @Sharad,这是在单独的 javascript 文件中吗?如果是,您不能在其中使用 url 助手。您可以在视图中将url 定义为全局变量:<script type="text/javascript">var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';</script>。然后您可以在单独的 javascript 文件中使用它。
    • 是的,这是在一个单独的 JS 文件中。我把它放在母版页中,现在它可以工作了。非常感谢@Darin。
    • windows.location.href 不做 GET 吗?如果是这样,最初的问题是尝试进行 POST。我很惊讶这被标记为已回答,因为两者之间存在很大差异。
    • 多参数情况下如何使用最后一种方法?
    【解决方案2】:

    你可以使用:

    window.location.href = '/Branch/Details/' + id;
    

    但是您的 Ajax 代码是不完整的,没有成功或错误函数。

    【讨论】:

      【解决方案3】:

      这可以通过在视图中使用隐藏变量来完成,然后使用该变量从 JavaScript 代码中发布。

      这是我在视图中的代码

      @Html.Hidden("RedirectTo", Url.Action("ActionName", "ControllerName"));
      

      现在您可以在 JavaScript 文件中将其用作:

       var url = $("#RedirectTo").val();
       location.href = url;
      

      它对我来说就像一个魅力。希望对你也有帮助。

      【讨论】:

      • 对于我的情况,这个答案更好,因为我想从模型(即 Model.WorkFlowID)中获取主键以包含到重定向中。像这样:@Html.Hidden("RedirectTo",Url.Action("ActionName","ControllerName", Model.WorkFlowID));
      • 宁可:@H​​tml.Hidden("RedirectTo",Url.Action("Edit","WorkFlows",new { id = Model.WorkFlowID }));
      • 这对我帮助很大!谢谢!!!我试图使用模式视图来重定向 MVC 中的页面,并且正在苦苦挣扎。欣赏它。
      • 这对我有用(ASP.NET MVC)。 window.location.href 没有
      【解决方案4】:
      <script type="text/javascript">
          function lnkLogout_Confirm()
          {
              var bResponse = confirm('Are you sure you want to exit?');
      
              if (bResponse === true) {
                  ////console.log("lnkLogout_Confirm clciked.");
                  var url = '@Url.Action("Login", "Login")';
                  window.location.href = url;
              }
              return bResponse;
          }
      
      </script>
      

      【讨论】:

        【解决方案5】:
        // in the HTML code I used some razor
        @Html.Hidden("RedirectTo", Url.Action("Action", "Controller"));
        
        // now down in the script I do this
        <script type="text/javascript">
        
        var url = $("#RedirectTo").val();
        
        $(document).ready(function () {
            $.ajax({
                dataType: 'json',
                type: 'POST',
                url: '/Controller/Action',
                success: function (result) {
                    if (result.UserFriendlyErrMsg === 'Some Message') {
                        // display a prompt
                        alert("Message: " + result.UserFriendlyErrMsg);
                        // redirect us to the new page
                        location.href = url;
                    }
                    $('#friendlyMsg').html(result.UserFriendlyErrMsg);
                }
            });
        </script>
        

        【讨论】:

          【解决方案6】:

          检查下面的代码,这将对您有所帮助:

          <script type="text/javascript">
            window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
          </script>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-22
            • 1970-01-01
            • 2014-07-21
            • 2017-09-16
            相关资源
            最近更新 更多