ASP.NET MVC Routing - Перенаправление в aspx? - PullRequest
0 голосов
/ 30 марта 2010

Кажется, это должно быть легко, но по какой-то причине мне не повезло.Я перевожу существующее приложение 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 должны игнорироваться, и корневой обработчик по умолчанию должен обрабатываться этим обработчиком:

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

Это работает нормально, ноВ результате YPOD дает мне следующее:

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

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

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

Ответы [ 2 ]

0 голосов
/ 30 марта 2010

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

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

0 голосов
/ 30 марта 2010

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

Если вы хотите перенаправить из корневого пути, почему бы не использовать документ по умолчанию из IIS, поместите его, например, в index.aspx, а затем добавьте на этой странице response.redirect на страницу, на которую вы хотите перенаправить?

...