2009-07-10 2 views
1

По какой-то причине при возврате ссылки, то есть нажатие кнопки «Назад» в вашем браузере приводит меня к неправильной ссылке в моем приложении. У меня есть путь:ASP.NET MVC - Обратные ссылки Неправильный 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.

FIXED

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-адрес referrer равен NULL. Урок выучен.

+0

Я не думаю, что это браузер, поэтому вам нужно будет опубликовать соответствующие части вашего контроллера (ов). –

+1

Можете ли вы использовать Fiddler для отслеживания трафика HTTP при навигации по приложению и нажмите кнопку назад браузера и, возможно, вставьте несколько журналов здесь? –

ответ

1

Возможно ли это на стороне клиента, то есть на JavaScript? Если вы используете вызов AJAX или что-то похожее на переход от DataContracts до GeneralContractView, это может привести к нарушению истории браузера. Я думал, что большинство фреймворков JavaScript/AJAX решили эту проблему, хотя, возможно, я, вероятно, лаем неправильное дерево! :-)

+0

Нет, не используйте ничего подобного. На данный момент это довольно простое приложение. – Kezzer

+0

Прошу прощения, я тут же подпрыгнул и забыл о чем-то. Я использовал клики строк таблицы для перенаправления в JavaScript. Проверьте мое редактирование, чтобы увидеть в mo ' – Kezzer

0

Я предполагаю, что он должен что-то сделать с вашими маршрутами ... не совсем уверен, хотя не видя кода. Убедитесь, что ваши маршруты находятся в правильном порядке, в котором они вам нужны. Или, может быть, попробуйте создать явные маршруты для этих действий, чтобы увидеть, не имеет значения.

+0

Я добавил код маршрута, но он использует настраиваемую систему маршрутов, разработанную Филом Хааком (я включил ссылку на его статью) – Kezzer

0

Вы возвращаете View() или RedirectToRoute/RedirectToAction в свои действия? Это может произойти, если вы перенаправляете молча.

+0

Нет, я еще не использовал RedirectToRoute или RedirectToAction, просто старый View() – Kezzer

Смежные вопросы