2011-04-05 20 views
0

我正在尋找將我正在創建的大型Web應用程序的一些頁內幫助外包出來,並希望在我們的頁面中添加這些內容非常容易已經準備好了。使用MVC的約定方法爲我的動作提供靜態內容

所以我想我可以創建一個系統,我可以將文本文件添加到相同的文件夾,其中一個動作期望它的視圖是讀取該文件的內容,該文件的內容可以傳回給視圖來顯示。要麼或者創建一個可以做同樣的事情的幫手。

Controllers 
    HomeController.cs 

Views 
    Home 
     Index.aspx 
     Index.txt 

的Index.aspx隨後將有權訪問Index.txt的內容。

我該如何着手創建這個系統。有沒有在.NET MVC中的任何內置類,我可以利用?

+0

爲什麼會選擇一個文本文件?你不認爲將它存儲在數據庫中會更好嗎? – goenning 2011-04-05 23:01:08

+0

基本上,所以我不必做很多工作(我所要做的就是將它們提供的文本文件放在視圖中),所以我不必讓他們訪問我的數據庫。 – ajbeaven 2011-04-05 23:14:14

回答

0

一種可能的解決方案是將它們存儲爲xml文件,而不是從視圖期望的模型序列化。然後,您可以創建一個Action Filter填充從XML文件返回數據的模型。我希望有所幫助。

1

我會在Content文件夾中創建一個並行層次結構,並將文件放在那裏,可能是HTML。然後,您可以使用並行層次約定在視圖中簡單地通過AJAX加載它們。

Content 
    Help 
    Home 
     index-help.html 
     about-help.html 
    Foo 
     index-help.html 
     bar-help.html 
在你的意見

<div class="help"> 
    <noscript> 
     <a href='@Url.Content("~/content/help/home/index-help.html")'>Click for Help</a> 
    </noscript> 
    </div> 

    <script type="text/javascript"> 
     $(function() { 
      $('.help').load('@Url.Content("~/content/help/home/index-help.html")'); 
     }); 
    </script> 

您可能還可以從中提取的RouteData控制器/行動的觀點,如果你的路線是一致的,並將這個與你_Layout.cshtml文件

然後路徑由路由數據提供。

@{ 
    var controller = ViewContext.RouteData["controller"] as string; 
    var action = ViewContext.RouteData["action"] as string; 
    var url = Url.Content(string.Format("~/content/help/{0}/{1}-help.html", controller, action)); 

    <div class="help"> 
    <noscript> 
     <a href="@url>Click for Help</a> 
    </noscript> 
    </div> 

<script type="text/javascript"> 
     $(function() { 
      $('.help').load("@url"); 
     }); 
    </script> 
    } 
+0

好的方法,因爲忽略了漸進式增強口頭禪,所以非jscript用戶可能會被冷落這個內容:) – 2011-04-06 09:14:16

+0

@jim - 您仍然可以使用noscript標記和幫助鏈接進行工作。 – tvanfosson 2011-04-06 12:19:19