#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 .
Если ваша страница по умолчанию находится в другой области, то вам также необходимо указать область.
Спасибо.