Как проложить страницу .aspx в проекте asp.net mvc 3?
У меня есть страница .aspx по следующему пути:
Areas/Management/Views/Ticket/Report.aspx
Я хочу перенаправить это на следующий путь в мой браузер:
http://localhost/Reports/Tickets
Как я могу это сделать?
Я пробую это:
routes.MapRoute(
"Tickets", // Route name
"Areas/Management/Views/Ticket/Report.aspx", // Original URL
new { controller = "Reports", action = "Tickets" } // New URL
);
Но я получил ошибку 404
.
Что я делаю неправильно?
Обс: Я положил это перед маршрутом Default
.
Ответы
Ответ 1
Решено! Итак, нам нужно добавить трафик на трассу веб-форм, чтобы убедиться, что он ловит только входящие маршруты, а не исходящие маршруты.
Добавьте в свой проект следующий класс (либо в новом файле, либо в нижней части global.asax.cs):
public class MyCustomConstaint : IRouteConstraint{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
return routeDirection == RouteDirection.IncomingRequest;
}
}
Затем измените маршрут Tickets на следующее:
routes.MapPageRoute(
"Tickets",
"Reports/Tickets",
"~/WebForms/Reports/Tickets.aspx",
true, null,
new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } }
);
Ответ 2
Если вы пытаетесь использовать веб-формы в проекте MVC, я бы переместил ваш .aspx из папки представлений, так как это не совсем представление, поэтому что-то вроде WebForms/Tickets/Report.aspx.
В веб-формах вы сопоставляете маршрут, вызывая метод MapPageRoute
.
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Tickets/Report.aspx");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Вам нужно будет установить это до маршрута MVC по умолчанию.
Ответ 3
вы делаете это наоборот. это сопоставляет ваш URL Areas/Management/Views/Ticket/Report.aspx
с {controller = "Reports", action = "Tickets" }
что вам следует делать вместо этого
установите URL-адрес как Reports/Tickets
EDIT: вы можете создать routeHandler только для маршрутизации на эту страницу .aspx.. вот так.
public class ASPXRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return BuildManager.CreateInstanceFromVirtualPath("~/Areas/Management/Views/Ticket/Report.aspx", typeof(Page)) as Page;
}
}
то u может добавить ur-маршрут в существующую таблицу маршрутов, используя
Route customRoute = new Route("Reports/Ticket",null, new ASPXRouteHandler());
routes.Add(customRoute);
Ответ 4
если вы оставите стандартную маршрутизацию при создании проекта asp.net
public class ReportsController : Controller
{
public ActionResult Ticket()
{
return View();
}
}
это должно сделать трюк.
Маршрутизация в asp.net mvc означает, что вы не ссылаетесь непосредственно на .aspx, а на Actions (methods), которые, в свою очередь, возвращают соответствующее представление (.aspx)