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

我们需要将ActionResult呈现给string以将页面添加到我们的内部搜索引擎索引中。 我们决定将此解决方案渲染为字符串 。

我遇到了用于处理View的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不为null,因此必须在ExecuteResult内部抛出exception。

我们还能错过什么?

我想到了。 ExecuteResult的问题没有按预期工作,因为我没有正确地模拟ControllerContext。 我能够通过模拟controllerContext来解决这个问题,如本文所述:

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

希望这篇文章能帮助将来的某个人,如果他们想要做类似的事情。

我自己没有尝试过,但是Phil Haack确实提出了一种方法,在这里用MVC 输出视图到字符串 。

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

不是你的问题的直接答案,但为什么你将整个视图渲染为搜索索引的字符串,而不是a)将数据本身推送到索引(LINQ to Lucene允许你用w /属性执行此操作)或b )将工作卸载到一个单独的进程,该进程使用一组权限来爬行前端?