2010-07-26 43 views
0

我希望能夠註冊腳本和樣式表。這些項目將被添加到當前頁面的頭部。例如,我有一個名爲ImageViewer的部分視圖,它呈現一些圖像並依賴於腳本。我不希望在使用ImageViewer的視圖中添加此腳本,而是希望能夠在部分視圖操作方法中註冊此腳本。如何在控制器級別註冊腳本和樣式表

是否有這樣做的任何標準的方式?

如果沒有,我怎麼會做我自己? MVC應用程序的生命週期似乎並不容易。我試圖實現它的方式是遍歷TempData集合中的一組腳本/樣式表,然後創建RegisterScript和RegisterStyleSheet方法來添加信息。

然而,因爲我想這個數據添加到我的網頁的頭部,並執行局部視圖方法頭部被渲染之後,似乎可能它不會。

你會如何去實現這樣的行爲?

回答

2

常見的方法(如Jamiec指出的)是包含在你的主模板的頭部部分中的ContentPlaceHolder。

但是,如果你希望你的控制器來決定什麼CSS渲染(也許是主題化或類似的東西),你還可以創建一個HTML幫助做到這一點。一個快速和骯髒的實現來說明:

母版頁:

<head runat="server"> 
    <%= Html.IncludeStyles() %> 
</head> 

操作方法:

public ActionResult SomeAction() 
{ 
    ViewData["StyleSheets"] = new[] { "StylesheetA", "StylesheetB" }; 
    return View(); 
} 

HTML助手:

public static class HtmlHelperExtensions 
{ 
    public static string IncludeStyles(this HtmlHelper helper) 
    { 
     var styles = helper.ViewData["StyleSheets"] as IEnumerable<string>; 
     var sb = new StringBuilder(); 

     if (styles != null) 
     { 
      foreach (var style in styles) 
      { 
       sb.AppendFormat("<link rel=\"stylesheet\" href=\"/content/" + style + ".css\" />\n"); 
      } 
     } 

     return sb.ToString(); 
    } 
} 
+0

喜。是的,這幾乎是我所做的,但是,在我的情況下,SomeAction是在頭部分渲染後執行的局部視圖。這意味着我無法在其中添加腳本或樣式。我想不出任何解決方案並不會強迫我讓主視圖知道我的所有部分視圖都使用的腳本。你有解決這個問題的辦法嗎? – Max 2010-07-26 16:40:34

+0

鏈接到您的用戶名,以便您瞭解我以前的評論。 – Max 2010-07-26 16:41:39

1

伊夫使用ViewMasterPage在頭部部分中的ContentPlaceHolder,讓我的局部視圖定義任何要包含腳本/樣式表/做到了這一點。