ASP.NET MVC - Обратные ссылки Неправильный URL - PullRequest
1 голос
/ 10 июля 2009

По какой-то причине при переходе по ссылке назад, т. Е. Нажатие кнопки «Назад» в браузере приводит меня к неправильной ссылке в моем приложении. У меня есть путь:

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);
    }
  }
}

Районы Фила Хаака.

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-ссылка ссылается на ноль. Урок выучен.

Ответы [ 3 ]

1 голос
/ 13 июля 2009

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

0 голосов
/ 12 июля 2009

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

0 голосов
/ 11 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...