我試圖使用ASP.NET MVC一段時間,然後我面臨一個問題,我不想在master頁面中包含我所有的js和css。但是,我怎麼能從我的特定視圖中的主頁面的頭部註冊?ASP.NET MVC中的腳本和CSS註冊助手?
回答
默認主頁面模板包含頭部的Content PlaceHolder。如果沒有,你可以輕鬆地添加一個:
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server" />
</head>
你的意見,可以然後把他們的頭想要的東西:
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script src="Scripts/myScripts.js" type="text/javascript"></script>
<link href="Styles/myStyles.css" rel="stylesheet" type="text/css" />
</asp:Content>
從技術上講,您應該將所有js放在頁面底部以獲得最佳性能。
我認爲唯一可以做到這一點的方法是將JavaScript包含在VIewData中,並在主頁上顯示ViewData(不是一個很好的解決方案)。
它看起來並不像有一個簡單的選擇「內置在'到ASP.NET MVC框架中。如果您正在使用用戶控件(.ascx),如果您要創建自包含控件,並且該控件也希望管理自己的JavaScript要求,那麼您甚至無法使用佔位符來幫助您。
在我創建了一個輔助類的結束,它有兩個方法:
private static SortedList<int, string> GetRegisteredScriptIncludes()
{
var registeredScriptIncludes = System.Web.HttpContext.Current.Items["RegisteredScriptIncludes"] as SortedList<int, string>;
if (registeredScriptIncludes == null)
{
registeredScriptIncludes = new SortedList<int, string>();
System.Web.HttpContext.Current.Items["RegisteredScriptIncludes"] = registeredScriptIncludes;
}
return registeredScriptIncludes;
}
public static void RegisterScriptInclude(this HtmlHelper htmlhelper, string script)
{
var registeredScriptIncludes = GetRegisteredScriptIncludes();
if (!registeredScriptIncludes.ContainsValue(script))
{
registeredScriptIncludes.Add(registeredScriptIncludes.Count, script);
}
}
public static string RenderScripts(this HtmlHelper htmlhelper)
{
var registeredScriptIncludes = GetRegisteredScriptIncludes();
var scripts = new StringBuilder();
foreach (string script in registeredScriptIncludes.Values)
{
scripts.AppendLine("<script src='" + script + "' type='text/javascript'></script>");
}
return scripts.ToString();
}
這是它的一個基本形式無論如何,試圖證明它的工作方式。它可以在很多方面得到增強,但目前它只是爲您濾除重複的腳本插入請求。每當你想在ASCX(或ASPX對這個問題)增加一個新的腳本,你可以這樣來做:
<%
Html.RegisterScriptInclude(Url.Content("~/Scripts/MapLayers/MapLayer.js"));
Html.RegisterScriptInclude(Url.Content("~/Scripts/MapLayers/Vehicles.js"));
%>
然後,你需要記住輸出他們一旦你完成。這是通過在你的頁面的地方,你要輸出的腳本標籤下面的調用來實現的:
<%=Html.RenderScripts() %>
似乎至今對我的工作。我確實有一半希望渲染問題取決於RenderScripts被調用的位置,尤其是如果不是所有的RegisterScriptIncludes都被調用過,但目前爲止它似乎完成了這項工作。如果你最後渲染腳本,那麼你應該沒有問題。
@Jason:警告,你不應該使用像這樣的靜態變量...在web上下文中,所有用戶和所有頁面請求共享靜態變量。我很驚訝你的代碼沒有遇到麻煩。原則是好的,但代碼是錯誤的,會給你帶來麻煩。在這種情況下,你應該使用System.Web.HttpContext.Current.Items。有關更多信息,請參見http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx。
這裏是類似的解決方案的一個傑森給了,但需要vdh_ant的意見考慮在內:
http://frugalcoder.us/post/2009/06/29/Handling-Scripts-in-ASPNet-MVC.aspx
MVC期貨目前已建成的helper此...
1.<head>
2. <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
3. <%= Html.Css("BlueTheme/site.css") %>
4. <%= Html.Script("jquery-1.3.2.js") %>
5.</head>
點擊此處瞭解詳情:http://blog.osbornm.com/archive/2009/10/12/mvc-script-css-helpers.aspx
馬修,
我看了看在Html.Css和Html.Script助手您的博客。我並不是說要批評,但是我沒有在博客中看到關於Css和Script助手如何解決這裏討論的問題的任何提示。這裏的問題是需要在渲染過程中的任何時刻「註冊」腳本引用,並且可能需要多次(在多次使用模板或局部視圖並註冊自己的腳本的情況下),然後輸出彙總的結果,無重複,在一個位置。
如果您的解決方案解決了這個問題,請糾正我一些問題。
--Regards, 肯
我寫了這樣一個經理MVC,和我的博客上寫了一篇關於它:
"JavascriptHelper–Managing JS files for ASP.NET MVC"
更新:我添加了捆綁: "JavascriptHelper:Managing JS files for ASP.NET MVC (With Bundling)"
- 1. 註冊Apple幫助手冊
- 2. ASP.NET Ajax腳本註冊
- 3. ASP.NET MVC和ASP.NET成員:用戶註冊
- 4. Codeigniter幫助用戶註冊腳本
- 5. ASP.NET MVC助手擴展和關注點分離
- 6. 如何在zend框架中註冊新助手(定製助手)
- 7. ASP.NET mvc RenderAction登錄和註冊查看
- 8. ASP.NET MVC AcceptVerbs和註冊路由
- 9. asp.net mvc autofac註冊和解析器
- 10. ASP.net MVC 3用戶註冊
- 11. ASP.NET MVC UI助手列表和文檔
- 12. ASP.NET MVC 3和HTML助手擴展
- 13. PHP註冊腳本
- 14. Asp.Net MVC Html助手擴展
- 15. ASP.net MVC html助手擴展?
- 16. 分頁助手asp.net mvc
- 17. ASP.NET MVC依賴注入和幫助器
- 18. MVC - 助手和Joomla
- 19. ASP.NET - 腳本和CSS壓縮
- 20. ASP.NET gzip腳本和CSS Global.asax
- 21. ZF2註冊導航定製助手
- 22. 在MVC 2編輯器模板中正確註冊JavaScript和CSS
- 23. ASP.NET MVC中的腳手架控制器
- 24. 什麼是助手類和腳本?
- 25. 註冊腳本多次
- 26. ScriptManager.RegisterClientScriptBlock註冊腳本兩次
- 27. 自動註冊腳本
- 28. 訪問Gravatar圖像的ASP.NET MVC助手
- 29. Scala腳本助手庫
- 30. MVC @Ajax中的Ajax。助手和JQuery.Ajax
是不是關於ASP.NET MVC而不是Web表單的問題? – 2014-02-23 02:28:42
Razor視圖引擎隨MVC 3發佈。這是*版本3 *,因爲在Razor開發/包含之前,該產品的兩個完整版本都已發佈。在Razor之前,默認視圖引擎是ASPX。 – sliderhouserules 2014-02-24 16:56:02