На моем сайте MVC 2 у меня есть помощник html, который я использую для добавления javascripts для своих страниц. На моей главной странице у меня есть основные javascript-коды, которые я хочу включить, а затем на aspx-страницах я добавляю javascript-коды для конкретных страниц.
Так, например, мой 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 собираются и отображаются в голове с помощью функции-заполнителя сайта 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>
Спасибо за вашу помощь.
Edit = Просто чтобы объяснить, если этот вопрос недостаточно ясен.
При создании «страницы» я собираю все файлы javascript, которые дизайнеры хотят использовать, используя html.addJavascript («filename.js») и сохраняю их в словаре - (1) останавливает людей, добавляющих дубликаты js-файлов - наконец, когда страница готова к визуализации, я аккуратно записываю все файлы javascript в заголовок. (2) - этот помощник помогает хранить JS в одном месте и не позволяет дизайнерам добавлять файлы javascript повсюду. Раньше это нормально работало с Master / SiteMaster Pages в mvc 2. но как мне этого добиться с помощью бритвы?
Редактировать: 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());
}
....