mvc应用程序中的asp.net服务器控件

时间:2011-06-10 12:57:34

标签: .net asp.net-mvc-3

我们有一个服务器控件,我们想在.net MVC应用程序中使用。控件只是页面的一部分,我不想重构整个应用程序(包括布局页面)以使这一页工作。所以我相信我的选择如下。

  • 只需将所有内容放在aspx页面上,然后使用路由去那里,丢失我的布局页面
  • 使用iframe(跛脚)
  • 使用HttpContext.Current.Server.Execute(url)(抛出错误)
  • 使用http请求获取html,然后将其推送到页面上,优于iframe

所以我想使用HttpContext.Current.Server.Execute来执行url,返回html并执行所有服务器端。我只是不断收到错误。该页面可以从浏览器访问,但路由有时会生效,然后我得到一个“子请求失败”。

思考?也请不要说这是个坏主意,我已经知道了。我只是想尽力做好事情。

感谢。

1 个答案:

答案 0 :(得分:0)

我最终让我的asp.net Web表单页面获取了MVC视图,并找出了它的内容。它向后退,但是有效,而且回发也有效。这是针对具有Action和视图的Razor引擎完成的,而不是局部视图。

var controller = new CalendarController();
var routeData = new System.Web.Routing.RouteData();
routeData.Values.Add("controller", "CalendarController");
controller.ControllerContext = new ControllerContext(new FakeHttpContext(), routeData, controller);
try
{
    using (StringWriter sw = new StringWriter())
    {
         var  viewResult = controller.Index() as ViewResult;
          var view = ViewEngines.Engines.FindView(controller.ControllerContext, "relative_pathto_view", "");
         ViewContext viewContext = new ViewContext(controller.ControllerContext, view.View,             controller.ViewData, controller.TempData, sw);
         view.View.Render(viewContext, sw);
         var page = sw.GetStringBuilder().ToString();
    }
}
catch (Exception ex)
{
    Response.Write(ex.ToString());
}