我们需要将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
内部抛出异常。
我们可能缺少什么?
答案 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)将工作卸载到使用一组权限爬行前端的单独进程?