从aspx页面调用Controller

时间:2013-07-18 02:37:05

标签: c#-4.0 asp.net-mvc-4 webforms

我一直试图找到解决我问题的方法2天了,我真的被卡住了。这是问题所在:

我有一个MVC应用程序(具有依赖注入和工作)只有一个webform。这个页面需要是一个webform,因为它里面有一个ReportViewer,如果我错了,请纠正我,但是MVC View与ReportViewer等服务器控件不兼容。这是页面的导航流程:

  1. 主页导航到ReportList页面
  2. ReportList页面显示用户可以查看并导航到“报告”页面的报告,并向其传递用户选择的报告的ID。
  3. 报告页面应根据从ReportList页面传递的ID同时从数据库中查找ReportPath和ServerUrl,同时授权用户,其权限存储在数据库中。
  4. 我可能会将ReportPath和ServerUrl作为查询字符串的一部分传递,以便报表页面(不是由控制器驱动的aspx)不必转到数据库来获取这些值。但问题是如何检查用户是否有权查看报告(有人可以使用链接查看报告)。

    我确实尝试将其挂钩到MVC模型并从ViewPage类继承了该页面。问题是页面由于某种原因不断重新加载。我仍然希望我的页面尽可能少地执行,并且控制器可以处理对授权属性和业务层的调用。所以,作为最后的手段,我想从aspx页面调用控制器,但由于依赖注入,我无法创建它的对象。

    有人可以就此提供一些指导吗?我有所有可用的代码但不知道要发布什么。

1 个答案:

答案 0 :(得分: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);