Измените страницу по умолчанию с помощью MVC

#c# #asp.net #asp.net-mvc

#c# #asp.net #asp.net-mvc

Вопрос:

Я хочу изменить страницу по умолчанию mydomain.com/Views/Home/Index.chtml приложения MVC, чтобы она указывала на другую страницу по умолчанию в корне приложения mydomain.com/Default.aspx .

Это конфигурация MapRoute по умолчанию для MVC. Как я могу изменить конфигурацию, чтобы указывать на mydomain.com/Default.aspx ? Я новичок в MVC и пытаюсь понять, как работает функция RegisterRoutes.

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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
  

Комментарии:

1. MVC не переходит к файлам — он переходит к методам действий в контроллерах. Что такое контроллер и метод, который возвращает это представление.

2. Является ли Default.aspx страницей WebForms?

3. Да, Default.aspx — это страница веб-формы.

4. Почему вы просто конвертируете свою страницу webforms в обычную страницу .cshtml в mvc. После вы можете использовать механизм маршрутизации, указав новое действие.

Ответ №1:

Из укоренения URL в ASP.NET (Веб-формы) — Блог chsakell, добавьте это перед маршрутом MVC по умолчанию:

 routes.MapPageRoute("default", "", "~/Default.aspx");
  

Вероятно, вы также могли бы выполнить это с помощью фильтра, но проще всего было бы просто выполнить перенаправление в Index действии HomeController .

 public class HomeController : Controller
{
    public ActionResult Index()
    {
        return Redirect("~/Default.aspx");
    }   
}
  

Комментарии:

1. Я уже использовал перенаправление на индексной странице, но я подумал, что есть «более чистый» способ сделать это.

2. Часть проблемы заключается в том, что страница по умолчанию ASP.NET Шаблоны MVC по соглашению предполагают, что запрос корневого URL предназначен для HomeController и его индексирующего действия. Использование страницы WebForms по умолчанию не совсем «нормально» в смешанном проекте (во всяком случае, в моем, по общему признанию, ограниченном опыте). PageRoute, вероятно, является самой простой альтернативой перенаправлению. у @StephenMuecke может быть предложение получше.

3. Я попробовал обратное перенаправление в HomeController, и пока оно работает хорошо…. Я попробую другие варианты, описанные здесь.

Ответ №2:

Ну, я думаю, что более чистый и правильный способ сделать это — перенести вашу страницу aspx в представление cshtml и добавить это в качестве маршрута по умолчанию в ваш route.config

В противном случае обходным путем является перенаправление с маршрута по умолчанию на страницу aspx.

Взгляните на блог Скотта здесь

Комментарии:

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

2. Я считаю перенаправление на default.aspx наилучшим возможным способом в этом сценарии.

Ответ №3:

Вы должны установить конфигурацию маршрута.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
        ).DataTokens.Add("area", "AdminMaster");
  

Здесь AdminMaster — это область , имя контроллера — Admin, а имя действия — Index .
Если ваша страница по умолчанию находится в другой области, то вам также необходимо указать область.

Спасибо.