Я новичок в asp.net, но мастер-страницы, похоже, делают то, что мне нужно - позволяют мне настраивать разные шаблоны / презентации / стили во время выполнения, поэтому мое приложение может выглядеть по-другому, выбрав другую мастер-страницу. Каждая мастер-страница находится в своей собственной папке с набором изображений, адаптированных для этого «шаблона» - затем я хочу на страницах содержимого ссылаться на различные изображения, находящиеся в папке выбранной в данный момент мастер-страницы, например, кнопки навигации в DataPager:
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1"
PageSize="25">
<Fields>
<asp:NextPreviousPagerField ButtonType="Image" ShowFirstPageButton="True"
ShowNextPageButton="False"
FirstPageImageUrl="<<Current Master Root>>/img/action-first.png"
PreviousPageImageUrl="<<Current Master Root>>/img/action-prev.png" />
<asp:NumericPagerField ButtonCount="10" NextPageText=">>"
PreviousPageText="<<" />
<asp:NextPreviousPagerField ButtonType="Image" ShowLastPageButton="True"
ShowPreviousPageButton="False"
LastPageImageUrl="<<Current Master Root>>/img/action-last.png"
NextPageImageUrl="<<Current Master Root>>/img/action-next.png" />
</Fields>
</asp:DataPager>
TEST: "<%= System.IO.Path.GetDirectoryName(MasterPageFile) %>"
(this does not work if we try to use it inside the DataPager?)
Есть ли правильный способ сделать это, например, использовать символ tilda ~ для доступа к корневой папке приложения? Установка этого в коде также оказывается утомительной, особенно для таких вещей, как DataPager, где свойства вложены в динамические списки субэлементов управления (например, я не знаю, как установить свойство DataPager1.Fields [0] .NextPreviousPagerField.FirstPageImageUrl в код).
Я обнаружил, что попытка сделать это с помощью тем требует большего количества кода, чем я начал, потому что мне нужно включить все определение элемента управления в файл скина, а не только свойства URL-адреса изображения, а затем мне нужно дублировать этот код в каждой отдельной теме / кожа. Если мне понадобится DataPager с другой конфигурацией кнопок и / или числовых полей, мне также придется продублировать эти варианты в каждом файле скина. Если я внесу изменение позже, мне придется не забыть внести это изменение и во все скины, что серьезно противоречит цели отделения кода от скина.
Мое приложение запускает несколько проектов, и каждый проект может выбирать свой собственный шаблон. Для всего приложения я хочу сказать: если текущий проект использует TemplateX, тогда используйте изображения из папки / TemplateX / img /, если TemplateY выбран, тогда используйте изображения из / TemplateY / img /. Как вы знаете, нельзя всегда полагаться на CSS, чтобы определить, какое изображение и где использовать, поэтому мы должны иметь возможность помещать ссылку на изображение непосредственно в вывод HTML.
В собственной веб-системе ISAPI DLL, которую я разработал, я просто использую строку подстановки вроде «[# HTML.Template] /img/prev.png», чтобы прикрепить папку шаблона перед URL-адресом изображения. Есть ли способ подключить пользовательский препроцессор .aspx, чтобы вручную заменить все вхождения, как в приведенном выше примере, «‹< Current Master Root >>» на текущую выбранную папку?