Rendering a view to a string in ASP.NET MVC 2

孤人 提交于 2019-12-30 06:41:09

问题


We need to render an ActionResult to a string to add pages to our internal search engine index. We settled on this solution to render to string.

I've run into a problem with the ExecuteResult call used to process the View.

Code Snippet:

var oldController = controllerContext.RouteData.Values["controller"];
controllerContext.RouteData.Values["controller"] = 
                  typeof(TController).Name.Replace("Controller", "");

viewResult.ExecuteResult(controllerContext); // this line breaks

I receive the following error:

"Object reference not set to instance of object" error.

I've confirmed viewResult is not null, so the exception has to be thrown internally in ExecuteResult.

What could we be missing?


回答1:


I figured it out. The issue with ExecuteResult wasn't working as expected was because I hadn't mocked the ControllerContext properly. I was able to solve the issue by mocking the controllercontext as described in this SO post:

Mocking Asp.net-mvc Controller Context

Hope this post helps someone in the future if they're trying to do something similar.




回答2:


I haven't tried it myself but Phil Haack did suggest a way to output a view to a string here with MVC in mind.




回答3:


MVCContrib has a BlockRenderer class which could be helpful for this scenario.




回答4:


Not a direct answer to your question, but why would you render the whole view as a string to your search index, rather than either a) pushing the data itself into the index (LINQ to Lucene lets you do this w/ attributes) or b) offloading the work to a separate process that crawls the front end using some set of rights?



来源:https://stackoverflow.com/questions/2456139/rendering-a-view-to-a-string-in-asp-net-mvc-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!