C# 在ASP.NET MVC 2中将视图呈现为字符串
我们需要将C# 在ASP.NET MVC 2中将视图呈现为字符串,c#,.net,asp.net-mvc,viewrendering,C#,.net,Asp.net Mvc,Viewrendering,我们需要将ActionResult呈现为字符串,以便将页面添加到我们的内部搜索引擎索引中。我们决定了 用于处理视图的executesult调用遇到问题 代码段: 我收到以下错误: “对象引用未设置为对象实例”错误。 我已确认viewResult不为空,因此必须在executesult中内部引发异常 我们可能遗漏了什么?我自己也没有尝试过,但我确实提出了一种在考虑MVC的情况下实现这一点的方法。这可能对这种情况很有帮助。不是对您的问题的直接回答,但为什么您要将整个视图作为字符串呈现到搜索索引中,而
ActionResult
呈现为字符串
,以便将页面添加到我们的内部搜索引擎索引中。我们决定了
用于处理视图的executesult
调用遇到问题
代码段:
我收到以下错误:
“对象引用未设置为对象实例”错误。
我已确认viewResult
不为空,因此必须在executesult
中内部引发异常
我们可能遗漏了什么?我自己也没有尝试过,但我确实提出了一种在考虑MVC的情况下实现这一点的方法。这可能对这种情况很有帮助。不是对您的问题的直接回答,但为什么您要将整个视图作为字符串呈现到搜索索引中,而不是a)将数据本身推到索引中(LINQ to Lucene允许您使用属性进行此操作)或b)将工作卸载到一个单独的进程,该进程使用一些权限集对前端进行爬网 我明白了。ExecuterSult的问题没有按预期工作,因为我没有正确地模拟ControllerContext。我通过模仿controllercontext解决了这个问题,如本文所述:
希望这篇文章能帮助将来有人尝试做类似的事情。Spark提供了渲染视图,可以让你轻松自如,减少摩擦。:)是的,但是将我们所有的视图移植到Spark并不实际。是的,但是在与MVC2 RC2兼容的最新版本MVCContrib中,BlockRenderer类似乎已经被弃用。
var oldController = controllerContext.RouteData.Values["controller"];
controllerContext.RouteData.Values["controller"] =
typeof(TController).Name.Replace("Controller", "");
viewResult.ExecuteResult(controllerContext); // this line breaks