【问题标题】:Rendering a view to a string in ASP.NET MVC 2在 ASP.NET MVC 2 中将视图呈现为字符串
【发布时间】:2011-01-28 04:58:37
【问题描述】:

我们需要将ActionResult 呈现为string 以将页面添加到我们的内部搜索引擎索引。我们选择了this solution to render to string

我遇到了用于处理视图的ExecuteResult 调用问题。

代码片段:

var oldController = controllerContext.RouteData.Values["controller"];
controllerContext.RouteData.Values["controller"] = 
                  typeof(TController).Name.Replace("Controller", "");

viewResult.ExecuteResult(controllerContext); // this line breaks

我收到以下错误:

"Object reference not set to instance of object" error.

我已经确认viewResult 不为空,所以必须在ExecuteResult 内部抛出异常。

我们可能缺少什么?

【问题讨论】:

  • Spark 提供开箱即用的渲染视图,减少摩擦。 :)
  • 是的,但是将我们所有的视图移植到 Spark 中并不实际。

标签: c# .net asp.net-mvc viewrendering


【解决方案1】:

我想通了。 ExecuteResult 的问题没有按预期工作是因为我没有正确模拟 ControllerContext。我能够通过模拟此 SO 帖子中描述的 controllercontext 来解决该问题:

Mocking Asp.net-mvc Controller Context

希望这篇文章对将来尝试做类似事情的人有所帮助。

【讨论】:

    【解决方案2】:

    不是对您的问题的直接回答,而是为什么要将整个视图呈现为搜索索引的字符串,而不是 a) 将数据本身推送到索引中(LINQ to Lucene 允许您使用属性执行此操作) 或 b) 将工作卸载到一个单独的进程,该进程使用某些权限来抓取前端?

    【讨论】:

      【解决方案3】:

      MVCContrib has a BlockRenderer class 这可能对这种情况有所帮助。

      【讨论】:

      • 是的,但似乎 BlockRenderer 类在与 MVC2 RC2 兼容的最新版本的 MVCContrib 中已被弃用。
      【解决方案4】:

      我自己没有尝试过,但Phil Haack 确实在考虑到 MVC 的情况下向output a view to a string 提出了一种方法。

      【讨论】:

        猜你喜欢
        • 2016-10-10
        • 2012-03-03
        • 1970-01-01
        • 2011-06-23
        • 2015-08-02
        相关资源
        最近更新 更多