2009-07-10 10 views
1

何らかの理由で、ブラウザで戻るボタンを押すと、アプリケーションの間違ったリンクに移動することがあります。私は、バックリンクを打ったとき、今ではASP.NET MVC - バックリンク間違ったURL

http://localhost:3340/Accounts/ContractsControl/DataContracts 
に私を取る

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

とそのページに私が

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

に私を取るのリンクをクリックしてください:私はのパスを持っています

私は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.

FIXED

私が持っていたJavaScriptは、私はとっくの昔に書いたものだったし、ちょうどそこに押し込みました。テーブルの行をクリックして、のようだった別のページにリダイレクトすることが可能であることは、次のとおりです。replaceは行いませんので

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

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

この作品なくなり、それはこのようにする必要があります新しい場所を割り当てるのと同じです。これは、URLリファラーがnullであることを意味します。学んだ教訓。

+0

私はそれがブラウザだとは思わないので、コントローラの関連する部分を投稿する必要があります。 –

+1

アプリをナビゲートしてブラウザのバックボタンを押して、ここにいくつかのログを貼り付けるとき、Fiddlerを使ってhttpトラフィックを監視できますか? –

答えて

1

クライアント側、つまりJavaScriptのものでもかまいませんか? DataContractsからGeneralContractViewにAJAXコールなどを使用している場合は、ブラウザの履歴が破損している可能性があります。私は、ほとんどのJavaScript/AJAXフレームワークがこの問題を解決したと思っていたので、おそらく間違ったツリーを吠えているでしょう! :-)

+0

いいえ、そんなことは一切使っていません。それは今、かなりのベアボーンアプリケーションです。 – Kezzer

+0

私はお詫びします、私はそこに結論にジャンプし、何かを忘れました。私は、JavaScriptでリダイレクトにテーブル行のクリックを使用していました。私の編集をチェックして、 – Kezzer

0

私はそれがあなたのルートで何かをしなければならないと推測しています...コードを見ることなくかなり確かです。ルートが必要な正しい順序になっていることを確認してください。あるいは、それらのアクションの明示的なルートを作成して違いがあるかどうか確認してみてください。

+0

私はルートコードを追加しましたが、Phil Haackによって開発されたカスタムルートシステムを使用しています(彼の記事へのリンクを含めました)。 – Kezzer

0

あなたの操作でView()、RedirectToRoute/RedirectToActionを返していますか?これは、あなたが静かにリダイレクトしている場合に起こる可能性があります。

+0

いいえ、RedirectToRouteまたはRedirectToActionを使用していません。見る() – Kezzer

関連する問題