2009-07-10 51 views
1

由於某些原因,當返回一個鏈接時,即點擊瀏覽器中的後退按鈕,會將我帶到我的應用程序中的錯誤鏈接。我有一個路徑:ASP.NET MVC - Back Links錯誤的URL

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引用者爲空。學過的知識。

+0

我不認爲它是瀏覽器,所以你需要發佈你的控制器的相關部分。 – 2009-07-10 13:29:06

+1

當您導航應用程序並按下後退瀏覽器按鈕並在此處粘貼一些日誌時,您是否可以使用Fiddler監控http流量? – 2009-07-13 09:58:10

回答

1

它可能是客戶端,即JavaScript的東西?如果您使用AJAX通話或類似的方式從DataContractsGeneralContractView,那麼它可能會破壞瀏覽器歷史記錄。儘管如此,我認爲大多數JavaScript/AJAX框架已經解決了這個問題,所以我可能會吼出錯誤的樹! :-)

0

我猜測它必須對您的路線做些什麼......雖然沒有看到代碼,但並不確定。檢查你的路線是否按照你需要的順序排列。或者嘗試爲這些行爲創建顯式路線,以查看它是否有所作爲。

+0

我已經添加了路由代碼,但是它使用了由Phil Haack開發的自定義路由系統(我已經包含他的文章的鏈接) – Kezzer 2009-07-13 08:32:36

0

您是否在操作中返回View()或RedirectToRoute/RedirectToAction?如果你悄悄地重定向,這可能會發生。

+0

不,我還沒有使用過RedirectToRoute或RedirectToAction,只是普通的老查看() – Kezzer 2009-07-13 08:33:26