ASP.NET MVC - 返回链接错误的URL

时间:2009-07-10 10:08:37

标签: asp.net-mvc

出于某种原因,当回到链接时,即点击浏览器中的后退按钮会将我带到我的应用程序中的错误链接。我有一条路:

http://localhost:3340/Accounts/ContractsControl/GeneralContracts

在该页面上,我点击了一个链接,该链接将我带到

http://localhost:3340/Accounts/ContractsControl/GeneralContractView/223

现在,当我点击后退链接时,它会带我去

http://localhost:3340/Accounts/ContractsControl/DataContracts

这是我访问GeneralContracts页面的页面。我不完全确定为什么会发生这种情况,但这意味着用户点击后退链接(这是非常常见的)会被带到错误的页面。

的Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Intranet.AreasLib;

namespace Intranet
{
  // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
  // visit http://go.microsoft.com/?LinkId=9394801

  public class MvcApplication : System.Web.HttpApplication
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapAreas(
              "{controller}/{action}/{id}",
              "Intranet",
              new[] { "Accounts", "Client" }
        );

      routes.MapRootArea(
          "{controller}/{action}/{id}",
          "Intranet",
          new { controller = "Home", action = "Index", id = "" }
        );

    }

    protected void Application_Start()
    {
      ViewEngines.Engines.Clear();
      ViewEngines.Engines.Add(new AreaViewEngine());

      RegisterRoutes(RouteTable.Routes);
    }
  }
}

Areas by Phil Haack.

固定

我所做的JavaScript是我很久以前写的东西,只是推到那里。能够点击表格行并重定向到另一个页面,如下所示:

<script type="text/javascript">
    $(document).ready(function() {
      $('tr:not(:has(th))').click(function() {
        window.location.replace("GeneralContractView/" + $(this).attr('id'));
      });
    });
</script>

虽然这有效,但 应该是这样的:

<script type="text/javascript">
    $(document).ready(function() {
      $('tr:not(:has(th))').click(function() {
        window.location = "GeneralContractView/" + $(this).attr('id');
      });
    });
</script>

因为replace与分配新位置不同。这意味着URL引用者为空。经验教训。

3 个答案:

答案 0 :(得分:1)

它可能是客户端,即JavaScript的东西吗?如果您正在使用AJAX调用或类似内容从DataContracts转到GeneralContractView,则可能会破坏浏览器历史记录。我认为大多数JavaScript / AJAX框架已经解决了这个问题,所以我可能会咆哮错误的树! : - )

答案 1 :(得分:0)

我猜它必须对你的路线做些什么......虽然没有看到代码但不太确定。检查您的路由是否符合您所需的正确顺序。或者尝试为这些操作创建显式路由,以查看它是否有所不同。

答案 2 :(得分:0)

您是否在动作中返回View()或RedirectToRoute / RedirectToAction?如果您正在静默重定向,则可能会发生这种情况。