Страница HTTP 404 указывает, что имя метода действия контроллера PublicView
не существует в определении контроллера. Если вы хотите связать страницу веб-форм со стилем пути маршрутизации MVC, например, /Public/PublicView
сопоставленный с /Views/Public/PublicView.aspx
без создания действия контроллера для этой страницы, метод MapPageRoute()
может удовлетворить ваши потребности.
Просто убедитесь, что пути маршрутов веб-форм поставлены перед маршрутом MVC по умолчанию, поскольку RouteConfig
оценивает определение маршрута сверху вниз, следовательно, наиболее конкретные маршруты оцениваются первыми:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// webforms page route
routes.MapPageRoute(
"PublicView",
"Public/PublicView",
"~/Views/Public/PublicView.aspx"
);
// MVC route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Если вы хотите отобразить все страницы ASPX в папке с одним MapPageRoute
, настройте его так, чтобы он содержал заполнитель имени страницы:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// webforms page route
routes.MapPageRoute(
"PublicView",
"Public/{pageName}",
"~/Views/Public/{pageName}.aspx"
);
// MVC route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Примечания:
1) Если вы хотите использовать страницу ASPX в качестве страницы просмотра MVC, отображаемой с помощью метода действия контроллера, необходимо изменить Inherits
на System.Web.Mvc.ViewPage
в директиве Page
следующим образом:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" ... %>
Затем замените серверные элементы управления webforms на HTML-помощники MVC перед вызовом страницы из контроллера, как указано ниже:
public class PublicController : Controller
{
public ActionResult PublicView()
{
return View("PublicView");
}
}
2) Избегайте замены пространства имен с System.Web.UI.Page
на System.Web.Mvc.ViewPage
для страниц ASPX в коде позади, поскольку это может вызвать несколько проблем при использовании серверных элементов управления.
Справка: Как определить маршруты для приложений Web Forms