В чем разница между этими подходами к ссылке на связанный CSS в ASP.NET Web Forms 4.5?

Я использовал Visual Studio 2012 и встроенный шаблон (в разделе «Добавить» -> «Новый проект») для создания нового проекта веб-приложения ASP.NET Web Forms, ориентированного на .NET Framework 4.5. Внутри страницы Site.Master, предоставленной по умолчанию, я вижу разметку, включающую CSS на странице, которая выглядит так:

<webopt:BundleReference runat="server" Path="~/Content/css" />

Однако я заметил, что потенциально могу использовать этот другой код вместо этого....

<%: Styles.Render("~/Content/css") %>

Когда я смотрю на отрендеренную страницу, результат кажется таким же. В чем разница между использованием webopt:BundleReference и Styles.Render?

Является ли один из этих подходов лучшим, чем другой?


person ClearCloud8    schedule 18.09.2012    source источник


Ответы (2)


Синтаксис <%: Styles.Render %> предназначен для ASP.NET MVC (который не может использовать элементы управления ASP.NET, поскольку для них нет реального контекста страницы). Элемент управления BundleReference предназначен для веб-форм.

ASP.NET MVC может использовать WebForms в качестве механизма представления в качестве альтернативы Razor (где вы видите слишком много символов «@»), поэтому есть некоторое пересечение.

Я предполагаю, что они добавили элемент управления, чтобы сохранить согласованность, вместо того, чтобы требовать, чтобы люди WebForms использовали функцию рендеринга страницы (теги <%).

person Dai    schedule 18.09.2012
comment
Что забавно, так это то, что по умолчанию главная страница имеет BundleReference для некоторого CSS и использует Scripts.Render для JavaScript Modernizr. Кажется, что они могли бы быть последовательными и использовать одну и ту же методологию для обоих. Например, используйте BundleReference для обоих.... - person ClearCloud8; 18.09.2012
comment
Есть ли у вас какие-либо идеи, почему оба подхода будут использоваться на одной и той же главной странице по умолчанию? Есть ли какое-то значение, что файлы css должны отображаться с использованием элемента управления webopt: BundleReference, а файлы JS должны отображаться с использованием Scripts.Render? - person ClearCloud8; 02.10.2012
comment
Я отмечаю это как ответ, потому что считаю, что он ближе всего объясняет, почему существуют оба этих варианта, даже если они достигают одной и той же конечной цели. Хотя мне все еще кажется неясным, почему MS использует оба подхода на одной и той же мастер-странице... но я пока не вижу ответов на этот вопрос. Спасибо за ответ. - person ClearCloud8; 22.10.2012
comment
@ClearCloud8 Я думаю, что разница между <%: Scripts.Render("") %> и <asp:ScriptManager> заключается в том, что Scripts.Render можно поместить внутрь <head>, тогда как ScriptManager можно поместить только внутрь <form runat="server">, если вы используете html5shiv, тогда единственным выбором будет Scripts.Render. - person Diryboy; 13.05.2014

Когда я смотрю на отрендеренную страницу, результат кажется таким же. В чем разница между использованием webopt:BundleReference и Styles.Render?

Как вы понимаете, BundleReference используется не только для включения ссылок на сценарии и стили, но и для их объединения вместе для повышения эффективности пропускной способности. См. руководство по Объединение и минификация. Я думаю, что последний — просто помощник для включения одного или нескольких скриптов, соответствующих шаблону URL.

person Robb Vandaveer    schedule 11.10.2012
comment
Спасибо за ответ. Однако оба этих подхода, по-видимому, выполняют связывание и минимизацию. (Я только что проверил это, отключив отладку в web.config, запустив и изучив исходный код страницы.) Итак... к сожалению, разница между этими подходами остается для меня загадкой... если только это не просто альтернатива для WebForms люди, чтобы использовать, как предложил Дай. - person ClearCloud8; 12.10.2012
comment
При дальнейшем тестировании я думаю, что вы правы. Однако я обнаружил одно существенное различие между использованием <webopt:BundleReference /> и <%: Styles.Render() %>. Вы можете указать массив ссылок на стили, используя вспомогательный класс Styles, например. <%: Styles.Render("~/Content/base/themes/css", "~/Content/css") %> - person Robb Vandaveer; 12.10.2012