在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 )将工作卸载到一个单独的进程,该进程使用一组权限来爬行前端?