5

我们需要渲染一个ActionResultto astring以将页面添加到我们的内部搜索引擎索引。我们选择了这个解决方案来渲染到 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

我们可能缺少什么?

4

4 回答 4

2

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

模拟 Asp.net-mvc 控制器上下文

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

于 2010-03-27T01:48:57.140 回答
0

我自己没有尝试过,但Phil Haack确实建议了一种将视图输出到此处的字符串的方法,并考虑到MVC。

于 2010-03-16T16:32:02.283 回答
0

MVCContrib 有一个 BlockRenderer 类,它可能对这种情况有所帮助。

于 2010-03-16T19:02:59.937 回答
0

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

于 2010-03-26T02:46:49.820 回答