2013-07-18 5 views
-1

Я пытался найти решение своей проблемы в течение 2 дней, и я действительно застрял. Вот проблема:Calling Controller from aspx page

У меня есть приложение MVC (с инъекцией зависимостей и работы) только с одной веб-формой. Эта страница должна быть веб-формой, потому что в ней есть ReportViewer, и, пожалуйста, исправьте меня, если я ошибаюсь, но MVC View несовместим с серверными элементами управления, такими как ReportViewer. Это навигационный поток страниц:

  1. Главная страница Переход на страницу ReportList
  2. ReportList страница отображает сообщения о том, что пользователь имеет возможность просматривать и осуществляет переход на страницу отчета и передает ему идентификатор сообщите, что пользователь выбрал.
  3. Страница отчета должна искать ReportPath и ServerUrl из базы данных на основе идентификатора, переданного со страницы ReportList, в то же время авторизуя пользователя, разрешения которого хранятся в базе данных.

Я могу потенциально передать ReportPath и ServerUrl как часть строки запроса, так что страница отчета (aspx, не управляемая контроллером) не должна идти в базу данных для получения этих значений. Однако проблема заключается в том, как проверить, разрешено ли пользователю просматривать отчет (кто-то может просто использовать ссылку для просмотра отчета).

Я попытался подключить его к модели MVC и унаследовал страницу из класса ViewPage. Проблема в том, что страница по какой-то причине перезагружалась. Я все еще хочу, чтобы моя страница делала как можно меньше, и контроллер обрабатывал вызовы атрибута авторизации и бизнес-уровня. Поэтому, в крайнем случае, я хочу вызвать контроллер с страницы aspx, но я не могу создать объект из него, потому что это инъекция зависимостей.

Может кто-нибудь прокомментировать это? У меня есть весь доступный код, но я не знаю, что делать.

ответ

2

Я узнал ответ и разместил здесь, если это кому-то поможет.

Я добавил еще один класс под названием ReportManager, который содержит код aspx за вызовами для выполнения запросов. ReportManager имитирует вызов Controller через этот код:

var routeData = new RouteData(); 
routeData.Values["controller"] = "Report"; 
routeData.Values["action"] = "SomeAction"; 
routeData.Values["SomeRouteValueKey"] = "someroutevalue"; 
var requestContext = new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData); 

IController controller = DependencyResolver.Current.GetService<ReportController>(); 
controller.Execute(requestContext);