【问题标题】:Fake HttpContext? (ASP.NET MVC)假的HttpContext? (ASP.NET MVC)
【发布时间】:2013-07-26 16:49:40
【问题描述】:

我正在尝试从服务器端事件(无请求)呈现部分视图。

我发现以下代码能够在没有控制器的情况下呈现部分视图。 Render MVC PartialView into SignalR response

public static string RenderPartialView(string controllerName, string partialView, object model)
{
    var context = new HttpContextWrapper(System.Web.HttpContext.Current) as HttpContextBase;

    var routes = new System.Web.Routing.RouteData();
    routes.Values.Add("controller", controllerName);

    var requestContext = new RequestContext(context, routes);

    string requiredString = requestContext.RouteData.GetRequiredString("controller");
    var controllerFactory = ControllerBuilder.Current.GetControllerFactory();
    var controller = controllerFactory.CreateController(requestContext, requiredString) as ControllerBase;

    controller.ControllerContext = new ControllerContext(context, routes, controller);

    var ViewData = new ViewDataDictionary();

    var TempData = new TempDataDictionary();

    ViewData.Model = model;

    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialView);
        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, ViewData, TempData, sw);

        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}

这在客户端请求(SignalR/websocket)之后使用时可以正常工作,但如果代码由服务器端事件(WCF 连接到另一个应用程序)触发,则 HttpContext.Current = null 会导致错误。

我怎样才能做到这一点?

PS。我也尝试过 Razor Engine,但出现错误“无法编译模板。当前上下文中不存在名称‘Html’”。由于模板还包含“@Html”,因此剃须刀引擎似乎无法在控制器之外解析模板。

【问题讨论】:

    标签: asp.net-mvc razor signalr asp.net-mvc-partialview


    【解决方案1】:

    通过从部分视图文件中删除所有@Html 标记,我能够使用 RazorEngine 使其工作。

    string template = System.IO.File.ReadAllText(path);
    string partialView = RazorEngine.Razor.Parse(template, model, "cachename");
    

    http://forums.asp.net/t/1923611.aspx/2/10?Fake+HttpContext+ASP+NET+MVC+#5459457

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2011-01-30
      • 1970-01-01
      相关资源
      最近更新 更多