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

时间:2010-03-16 16:26:11

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

我们需要将ActionResult呈现给string,以便将网页添加到我们的内部搜索引擎索引中。我们决定this solution to render to 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不为空,因此必须在ExecuteResult内部抛出异常。

我们可能缺少什么?

4 个答案:

答案 0 :(得分:2)

我明白了。 ExecuteResult的问题没有按预期工作,因为我没有正确地模拟ControllerContext。我能够通过模拟控制器上下文来解决这个问题,如本文所述:

Mocking Asp.net-mvc Controller Context

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

答案 1 :(得分:0)

我自己没有尝试过,但是Phil Haack确实提出了output a view to a string在这里考虑MVC的方法。

答案 2 :(得分:0)

MVCContrib has a BlockRenderer class可能对此方案有所帮助。

答案 3 :(得分:0)

不能直接回答你的问题,但为什么你要将整个视图作为字符串呈现给你的搜索索引,而不是a)将数据本身推送到索引中(LINQ to Lucene允许你这样做带有属性)或b)将工作卸载到使用一组权限爬行前端的单独进程?