1

我正在尝试浏览我的网站并对所有内容进行编目。为此,我需要

  1. 查找所有视图(可能作为控制器/动作组合)
  2. 将我的所有视图呈现为字符串

为了抓取我自己的网站,我实现了这个站点地图提供程序。所以我有一个这样的xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0"
 enableLocalization="false">

  <mvcSiteMapNode title="Home" controller="Home" action="Index"
 changeFrequency="Always" updatePriority="Normal">

  <mvcSiteMapNode title="Dashboard" controller="Home" action="Dashboard"/>
  <mvcSiteMapNode title="My Profile" controller="Profile" action="MyProfile"/>
  <mvcSiteMapNode title="My Jobs" controller="Profile" action="MyJobs"/>
 </mvcSiteMapNode>
</mvcSiteMap>

我可以使用 linq-to-xml 转换为列表。

我打算使用RenderViewToString通用方法将每个视图转换为字符串。

不幸的是,当您想要将特定视图呈现为字符串时,这会更好。当您事先不知道具体型号/控制器时。

总之:有没有办法将视图呈现为仅将 Controller 和 Action 名称作为字符串的字符串?

4

2 回答 2

1

Rick Strahl最近发表了一篇文章,展示了如何在 Asp.NET 之外呈现视图。鉴于这篇文章,它看起来非常简单,您可以编写一个文件或字符串来搜索目的。看一看!

于 2013-07-30T18:48:10.060 回答
1

凭借所有优点和缺点,我最终覆盖了OnResultExecuted我的基本控制器,以在每次用户访问页面时捕获呈现的 html。

protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
    var viewResult = filterContext.Result as ViewResult;
    var controller = filterContext.Controller;


    using (StringWriter sw = new StringWriter())
    {
        ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
        viewResult.View.Render(viewContext,sw);
        string s = sw.ToString();
    }  


    base.OnResultExecuted(filterContext);
}

呈现的 HTML 将被写入数据库。我可能应该决定创造性逻辑,以选择性地使用时间戳或页面更新状态进行数据库更新。

于 2013-07-31T16:18:28.573 回答