在我的MVC 2網站中,我有一個html助手,用於爲我的頁面添加javascript。在我的母版頁中,我有要包含的主要JavaScript,然後在aspx頁面中包含頁面特定的JavaScript。將MVC2 Helpers移動到MVC3剃鬚刀視圖引擎
因此,例如,我的Site.Master有這樣的事情:
....
<head>
<%=html.renderScripts() %>
</head>
...
//core scripts for main page
<%html.AddScript("/scripts/jquery.js") %>
<%html.AddScript("/scripts/myLib.js") %>
....
然後在孩子aspx頁面,我可能還需要包括其他的腳本。
...
//the page specific script I want to use
<% html.AddScript("/scripts/register.aspx.js") %>
...
所以當整個頁面獲取呈現的JavaScript文件全部收集和SITEMASTER佔位功能RenderScripts的頭部呈現。這工作正常。
現在MVC 3和剃刀視圖引擎,他們的佈局頁面行爲不同,因爲現在我的頁面級別的JavaScripts不呈現/包含。現在我看到了LayoutMaster的內容。
如何獲得MVC 3和剃鬚刀視圖引擎的解決方案? (助手已經被重新寫入到返回HTMLString ;-))
供參考:我MasterLayout看起來是這樣的:
...
...
<head>
@{
Html.AddJavaScript("/Scripts/jQuery.js");
Html.AddJavaScript("/Scripts/myLib.js");
}
//Render scripts
@html.RenderScripts()
</head>
....
和子頁面看起來是這樣的:
@{
Layout = "~/Views/Shared/MasterLayout.cshtml";
ViewBag.Title = "Child Page";
Html.AddJavaScript("/Scripts/register.aspx.js");
}
....
<div>some html </div>
感謝您的幫助。
編輯=只是爲了解釋,如果這個問題不夠清楚。 (1)通過使用html.addJavascript(「filename.js」)並將它們存儲在字典中 - (1)阻止人們添加重複的js,從而產生設計者想要使用的所有javascript文件文件 - 最後當頁面準備好渲染時,我會將所有JavaScript文件整齊地寫入標題中。 (2) - 這個幫助程序有助於將JS保存在一個地方,並防止設計者在整個地方添加JavaScript文件。這用於mvc 2中Master/SiteMaster Pages的正常工作,但我怎樣才能用剃刀實現呢?
編輯:HTML輔助代碼:
....
private const string SCRIPTLINK =
"<script src=\"{0}\" type=\"text/javascript\"></script>";
public static HtmlString RenderScripts(this HtmlHelper helper) {
OrderedDictionary scripts =
helper.ViewContext.HttpContext.Items["JavaScripts"] as OrderedDictionary;
StringBuilder sb = new StringBuilder(500);
foreach (DictionaryEntry script in scripts) {
sb.AppendFormat(SCRIPTLINK, script.Key);
}
return new HtmlString(sb.ToString());
}
....
你在哪裏編寫腳本? – SLaks 2011-02-11 15:08:36
什麼是您的HtmlHelper代碼? – 2011-02-11 15:29:33
你在哪裏保存字典? – SLaks 2011-02-11 15:29:43