2009-07-10 10 views
1

Pour une raison quelconque, lorsque vous revenez sur un lien, c'est-à-dire que vous appuyez sur le bouton de retour de votre navigateur, cela m'amène au mauvais lien dans mon application. J'ai un chemin de:ASP.NET MVC - Liens arrière URL erronée

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

et sur cette page je clique sur un lien qui me prend à

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

maintenant quand je frappe le lien de retour, il me faut pour

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

qui est la page où je suis allé à la page GeneralContracts de. Je ne suis pas tout à fait sûr pourquoi cela se produit, mais cela signifie que les utilisateurs frappant le lien de retour (ce qui est très commun) seront pris à la mauvaise page.

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.

FIXE

Le JavaScript j'avais été quelque chose que j'ai écrit il y a des siècles et juste bousculé là-dedans. Être en mesure de cliquer sur les lignes de table et de rediriger vers une autre page qui était comme suit:

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

Bien que cela fonctionne, il devrait ressembler à ceci:

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

Parce que replace ne fait pas le Identique à l'attribution d'un nouvel emplacement. Cela signifie que le référent d'URL est null. Leçon apprise.

+0

Je ne pense pas que ce soit le navigateur, donc vous aurez besoin de poster les parties pertinentes de votre contrôleur (s). –

+1

Pouvez-vous utiliser Fiddler pour surveiller le trafic http lorsque vous naviguez dans l'application et appuyez sur le bouton du navigateur arrière et peut-être coller des journaux ici? –

Répondre

1

Pourrait-il être côté client, c'est-à-dire une chose JavaScript? Si vous utilisez un appel AJAX ou quelque chose de similaire pour passer de DataContracts à GeneralContractView, il se peut que l'historique du navigateur soit brisé. Je pensais que la plupart des frameworks JavaScript/AJAX avaient résolu ce problème, donc je suis probablement en train d'aboyer sur le mauvais arbre! :-)

+0

Non, ne pas utiliser quelque chose comme ça du tout. C'est une application plutôt délicate pour le moment. – Kezzer

+0

Je m'excuse, j'ai sauté à une conclusion là et j'ai oublié quelque chose. J'utilisais des clics de ligne de table pour les redirections en JavaScript. Vérifiez ma modification pour voir dans un mo ' – Kezzer

0

Je suppose qu'il doit faire quelque chose avec vos routes ... pas tout à fait sûr cependant sans voir le code. Vérifiez que vos itinéraires sont dans l'ordre correct où vous en avez besoin. Ou essayez de créer des routes explicites pour ces actions afin de voir si cela fait une différence.

+0

J'ai ajouté le code des routes, mais il utilise un système de route personnalisé tel que développé par Phil Haack (j'ai inclus le lien vers son article) – Kezzer

0

Retournez-vous View() ou RedirectToRoute/RedirectToAction dans votre action? Cela peut arriver si vous redirigez silencieusement.

+0

Non, je n'ai pas encore utilisé RedirectToRoute ou RedirectToAction Voir() – Kezzer

Questions connexes