Я нашел необходимость сделать это в моем собственном проекте, потому что я хотел иметь возможность иметь отдельный файл javascript \ css для каждого представления.
В итоге я создал контроллер для агрегированияфайлы на сервере для меня, а затем отправить только один файл css \ js в браузер.Ответ, возможно, более сложный, чем вы запрашивали, поэтому я рекомендую первую часть.
Вы можете создать метод расширения, который можно вызывать вверху каждой страницы, чтобы добавить файл JS в список.в словаре TempData для запроса.Затем вы вызываете отдельный метод из макета, который будет отображать любые дополнительные ссылки.
Это работает, потому что TempData сохраняется только для запроса, а представление макета отображается последним (после запуска всех представлений и частичных операций).
У меня есть полный пример класса: http://pastebin.com/EUC2fAca, но я также формирую ссылки на мой агрегатор, поэтому вам нужно будет изменить.Суть заключается в следующем:
public static string JSKey = "pageJSList";
private static void AddToDictionary(HtmlHelper helper, string[] files, string key)
{
if (files == null || files.Length == 0)
return;
TempDataDictionary dict = helper.ViewContext.TempData;
if (!dict.ContainsKey(key))
dict.Add(key, new List<string>());
(dict[key] as List<string>).AddRange(files);
}
private static void InsertToDictionary(HtmlHelper helper, string[] files, string key)
{
if (files == null || files.Length == 0)
return;
TempDataDictionary dict = helper.ViewContext.TempData;
if (!dict.ContainsKey(key))
dict.Add(key, new List<string>());
(dict[key] as List<string>).InsertRange(0, files);
}
public static void AddJS(this HtmlHelper helper, params string[] files)
{
AddToDictionary(helper, files, JSKey);
}
public static void AddJSToTop(this HtmlHelper helper, params string[] files)
{
InsertToDictionary(helper, files, JSKey);
}
public static MvcHtmlString GetJsTagHtml(HtmlHelper helper)
{
var files = helper.ViewContext.TempData[JSKey] as List<string>;
StringBuilder tags = new StringBuilder();
string jsTemplate = "<script type=\"text/javascript\" src=\"/Scripts/{0}\"></script>";
foreach (string file in files)
{
tags.AppendLine(String.Format(jsTemplate, file));
}
return MvcHtmlString.Create(tags.ToString());
}
Вы хотите, чтобы метод Insert запускал его в макете, поскольку, опять же, он запускается последним, поэтому вы захотите вставить библиотеки jquery или другие зависимости, которые должны бытьсначала в списке.
Ваш метод GetJS, вероятно, должен возвращать MvcHtmlString, которая содержит все нужные вам теги.
Надеюсь, что это поможет и не слишком затянуто =)