Вопрос по asp.net, c#, routing, asp.net-mvc – Как перенаправить страницу .aspx в проект asp.net mvc 3?

12

У меня есть страница ASPX по следующему пути:

<code>Areas/Management/Views/Ticket/Report.aspx
</code>

Я хочу направить это по следующему пути в моем браузере:

<code>http://localhost/Reports/Tickets
</code>

Как я могу это сделать?

Я пытаюсь это:

<code>routes.MapRoute(
    "Tickets", // Route name
    "Areas/Management/Views/Ticket/Report.aspx", // Original URL
    new { controller = "Reports", action = "Tickets" } // New URL 
);
</code>

Но я получил404 ошибка.

Что я делаю не так?

Obs: я поставил это передDefault маршрут.

Ваша страница .aspx, страница aspx веб-форм или страница механизма просмотра веб-форм mvc? Chris Diver
Это страница .aspx. Vinicius Ottoni
У вас могут быть представления .aspx, которые используют механизм просмотра веб-форм, и вы можете иметь .aspx веб-формы. Я подозреваю, что вы пытаетесь заставить гибрид веб-форм и mvc работать, но неясно (по крайней мере мне), чего вы пытаетесь достичь. Chris Diver
Я пытаюсь использовать отчеты Crystal в моем проекте asp.net mvc. И я пытаюсь использовать ReportViewer, который работает (с полным набором функций) только в веб-формах. Итак, теперь я хочу только направить страницу .aspx с ReportViewer в виде представлений mvc (без .aspx в конце URL). Vinicius Ottoni

Ваш Ответ

4   ответа
-2

если вы оставите маршрутизацию по умолчанию при создании проекта asp.net

public class ReportsController : Controller
{
        public ActionResult Ticket()
        {
            return View();
        }        
}

это должно сделать свое дело. Маршрутизация в asp.net mvc означает, что вы не ссылаетесь непосредственно на.aspx but to Actions (methods) that in turn return an appropriate view (.aspx)

Нет, не будет. Вы действительно проверили это, (голосуя против меня)? Я действительно исправил код, чтобы он вернулсяlocalhost/Reports/Tickets
Но с этим URL (когда я вернусь на страницу .aspx) будет иметь .aspx в конце, не так ли? Vinicius Ottoni
если вы пытаетесь использовать отчеты Crystal, то вы должны проверить этот ответstackoverflow.com/questions/348785/…
Я видел это. Страница работает (я тестировал в другом проекте), моя проблема сейчас только в том, чтобы перенаправить ее в проект asp.net mvc. Vinicius Ottoni
Действительно ли ваша проблема в MVC, из того, что я собрал из ваших предыдущих комментариев, у вас есть веб-форма, выполняющая отображение, так что, возможно, вам нужен модуль перезаписи URL-адреса IIS для этой конкретной страницы.learn.iis.net/page.aspx/461/… или у вас есть контроллер для обработки запроса перед отправкой на ваш взгляд?
-1

ты делаешь это наоборот. это отображает ваш URLAreas/Management/Views/Ticket/Report.aspx к {controller = "Reports", action = "Tickets" }
что ты должен сделать вместо этого установите URL как
Reports/Tickets EDIT:- you can create a routeHandler just for routing to this .aspx page.. like this.

public class ASPXRouteHandler : IRouteHandler 
{ 
   public IHttpHandler GetHttpHandler(RequestContext requestContext) 
   { 

     return BuildManager.CreateInstanceFromVirtualPath("~/Areas/Management/Views/Ticket/Report.aspx",  typeof(Page)) as Page; 
   } 
}

Затем вы можете добавить свой маршрут к существующей таблице маршрутов, используя

Route customRoute = new Route("Reports/Ticket",null, new ASPXRouteHandler()); 
      routes.Add(customRoute); 
Vinicius Ottoni
Когда я запускаю проект, браузер перенаправляет на следующий URL & quot;localhost:37538/Reports/…& Quot ;. Оо Vinicius Ottoni
Что я должен положить вdefaults? И вnew CustomRouteHandler() ты хочешь иметь в видуnew ASPXRouteHandler(), право? Vinicius Ottoni
Вам придется создать обработчик маршрута. В настоящее время URL-адрес сопоставляется с отчетами / билетами, которые, как правило, существуют, и, следовательно, вы получаете 404. Попробуйте вернуть строку из & quot; Отчеты / билеты & quot; и посмотрим, где ты не прав
21

Если вы пытаетесь использовать веб-формы в проекте 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 по умолчанию.

Спасибо за ваше предложение.
Я только что попробовал это в новом проекте MVC, и это прекрасно работает для меня. Вы кладете/Reports/Tickets прямо в браузере или нажав на ссылку на другой странице?
Я положил это сразу послеroutes.IgnoreRoute("{resource}.axd/{*pathInfo}") и я получил тот же URL. знак равно Vinicius Ottoni
Это соответствует маршруту по умолчанию в предположении, строка выше должна быть сразу послеroutes.IgnoreRoute("{resource}.axd/{*pathInfo}") линия
Когда я запускаю проект, браузер перенаправляет на следующий URL & quot;localhost:37538/Reports/…& Quot ;. Оо Vinicius Ottoni
13

Solved! Таким образом, нам нужно добавить маршрутное ограничение в маршрут веб-форм, чтобы он отслеживал только входящие маршруты, а не генерацию исходящих маршрутов.

Добавьте следующий класс в ваш проект (либо в новом файле, либо в нижней части файла global.asax.cs):

public class MyCustomConstaint : IRouteConstraint{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
        return routeDirection == RouteDirection.IncomingRequest;
    }
}

Затем измените маршрут Билеты на следующий:

routes.MapPageRoute(
    "Tickets",
    "Reports/Tickets",
    "~/WebForms/Reports/Tickets.aspx",
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } }
);
Я Vecthor. @JabberwockyDecompiler Vinicius Ottoni
Я сделал тот же вопрос там, поэтому, с ответом CodeHobo, я поставил здесь. "I" m Vecthor " там. Это только псевдоним, кодовое имя, что-то в этом роде ^^. Vinicius Ottoni
Спасибо CodeHobo за это решение.Reference
Хм, не знаю, зачем я это сказал, ты сменил имя?
Мои друзья называют меня Jabber: D, ха-ха, на самом деле я иду по TJ.

Похожие вопросы