2010-02-03 73 views
1

我在我的网站上有一个处理未知动作的控制器,并返回一个视图(如果存在)。这样可以将静态内容添加到网站的特定区域,而无需修改控制器。我现在面临的问题是创建一个sitemap.xml文件,其中包含指向所有这些“未知”视图的链接。从我正在生成站点地图的方法中枚举这些静态内容视图的最佳方法是什么?ASP.NET MVC:我如何获得所有可用的视图?

下面的代码显示了我在做什么未知的行动:

protected override void HandleUnknownAction(string actionName) 
{ 
    GetUnknownActionResult(actionName).ExecuteResult(ControllerContext); 
} 

[NonAction] //public so it is testable 
public ActionResult GetUnknownActionResult(string actionName) 
{ 
    var result = View(actionName); 

    if (result.ViewEngineCollection.Any(engine => engine.FindView(ControllerContext, result.ViewName, null, true).View != null)) 
    { 
     return result; 
    } 

    return new HttpNotFoundResult(); 
} 
+1

静态内容?你为什么不把它作为一个htm文件放在内容文件夹(或其子文件夹)中? – tvanfosson 2010-02-03 20:28:35

+0

内容并非真正的静态内容,因为它需要在母版页(本身具有动态元素)的上下文中显示。虽然,也许这个问题是一个设计问题,我应该考虑加载HTML到主。虽然...仍然想知道列举与特定控制器相关的视图的“最佳”方法,但不会改变问题。现在,我已经使用硬编码的字符串Server.MapPath()到视图文件夹。如果这是最好的方式,那就这样吧。 – mkedobbs 2010-02-07 02:05:50

回答

1

如果您提供静态内容,如从“静态内容”目录.htm文件和.pdf文件,我只想使用System.File.IO来枚举这些文件,并从中建立链接。

+0

这些不是真正的静态内容,因为它们是使用母版页的视图。我没有问题使用System.File.IO来读取目录,但我希望有一个更好的方法来枚举视图。 – mkedobbs 2010-02-03 20:32:55

+1

这里有一个XML Sitemap助手:http://www.asp-net-mvc.com/MvcHelpers/XmlSitemap,但我不知道它是否适用于您的情况。 – 2010-02-03 20:36:32

相关问题