Вопрос

Кажется, это должно быть легко, но по какой -то причине мне не повезло. Я перемещаю существующее приложение WebForms в MVC, поэтому мне нужно сохранить корень сайта, указывающего на мои существующие страницы ASPX на данный момент и только применять маршрутизацию к названным маршрутам. Вот что у меня есть:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

        RouteTable.Routes.Add(
            "Root",
            new Route("", new DefaultRouteHandler())
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Calendar2", action = "Index", id = "" }  // Parameter defaults
        );
    }

Таким образом, страницы ASPX должны быть проигнорированы, и этот обработчик должен обрабатывать корневой URL -адрес по умолчанию:

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
                "~/Dashboard/default.aspx", typeof(Page)) as IHttpHandler;
    }
}

Кажется, это работает нормально, но полученный YPOD дает мне это:

Было найдено несколько элементов управления с одним и тем же идентификатором. Трейс требует, чтобы элементы управления имели уникальные идентификаторы.

что, кажется, подразумевает, что страница каким -то образом выполняется дважды. Если я просто ввожу URL -адрес на странице панели панели, он работает нормально (без маршрутизации, без ошибок). Я понятия не имею, почему код обработчика будет делать что -то по -другому.

Итог - я хотел бы просто перенаправить путь URL -адреса корня на ASPX по моему выбору - может ли кто -нибудь пролить свет?

Это было полезно?

Решение 2

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

РЕДАКТИРОВАТЬ: Ну, это на самом деле все еще проблема - не уверен, почему это работало раньше, но это немного случайно. Суть, кажется, заключается в том, что MVC, похоже, не хорошо играет с Trace.Axd Sanger в некоторых обстоятельствах, которые в противном случае производят совершенно действительную разметку. У меня действительно нет хорошего объяснения, но отключение отслеживания в web.config обходит ошибку. Для моих целей на данный момент это достаточно хорошо, но я хотел бы услышать лучшее объяснение кого -то другого ...

Другие советы

Я не совсем понимаю вашу проблему, может быть, я не достаточно опытен. В любом случае я попробую ...;)

Если вы хотите перенаправить из корневого пути, почему бы не использовать документ по умолчанию из IIS, поместите его на index.aspx, например, а затем добавьте на эту страницу ответ. РЕСПРАВЛИТЬ на страницу, на которую вы хотите перенаправить?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top