在ASP.NET MVC 2中将视图呈现为字符串

5
我们需要将 ActionResult 渲染为 string,以便将页面添加到我们内部搜索引擎索引中。我们选择了 这种将其渲染为字符串的解决方案
我在使用 ExecuteResult 调用处理视图时遇到了问题。

代码片段:

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

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

我收到以下错误信息:
“对象引用未设置为对象的实例”错误。
我已确认viewResult不为空,因此异常必须在ExecuteResult内部抛出。
我们可能遗漏了什么?

Spark提供了渲染视图到字符串的开箱即用功能,而且非常流畅。 :) - Arnis Lapsa
是的,但将我们所有的视图移植到Spark上并不实际。 - Frank Rosario
4个回答

2

我找到了解决方法。ExecuteResult无法按预期工作的问题是因为我没有正确地模拟ControllerContext。我通过按照此SO帖子中描述的方式模拟controllercontext来解决了这个问题:

Mocking Asp.net-mvc Controller Context

希望这篇文章能帮助将来有类似问题的人。


0

0

是的,但似乎BlockRenderer类已经在与MVC2 RC2兼容的最新版本的MVCContrib中被弃用了。 - Frank Rosario

0

虽然不是直接回答你的问题,但为什么你要将整个视图呈现为字符串到搜索索引中,而不是将数据本身推送到索引中(使用 LINQ to Lucene 可以使用属性实现)或者将工作转移到使用某些权限集合爬取前端的单独进程中?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接