2010-02-03 71 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

相關問題