Ограничьте использование файлов JavaScript и CSS на главной странице ASP.NET MVC 2 на основе содержимого модели и просмотра. - PullRequest
0 голосов
/ 21 мая 2010

Я хочу включить определенные .js и .css файлы только на те страницы, которые в них нуждаются .

Например, моему EditorTemplate DateTime.ascx нужны файлы anytimec.js и anytimec.css.

Этот шаблон применяется всякий раз, когда я использую вспомогательные методы EditorFor или EditorForModel в представлении для модели со значением типа DateTime.

Моя техника:

Я поместил это условие в раздел <head> моей главной страницы. Он проверяет свойство типа DateTime в ModelMetadata .

<% if (this.ViewData.ModelMetadata.Properties.Any(p => p.ModelType == typeof(DateTime))) { %>
    <link href="../../Content/anytimec.css" rel="stylesheet" type="text/css" />
    <script src="../../Scripts/anytimec.js" type="text/javascript"></script>
<% } %>

Это имеет две проблемы :

  1. Сбой, если у меня есть вложенные дочерние модели типа DateTime

  2. Необязательно запускается представлениями без EditorFor или EditorForModel (пример: DisplayForModel )

Как я могу улучшить эту технику?

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Я думаю, менеджер сетевых активов telerik позволяет вам выполнять то, что вы хотите, и с открытым исходным кодом.

1 голос
/ 21 мая 2010

Лично я бы использовал частичное представление и заполнитель содержимого ASP.

В разделе Представления / Общий доступ есть частичное представление EditorScripts.ascx, которое содержит теги, определяющие сценарии, которые будут включены в ваши страницы редактирования.

Затем поместите заполнитель в тег Site.Master <head>, что-то вроде этого:

<asp:ContentPlaceHolder ID="HeadContent" runat="server" />

В любом представлении, в котором вы хотите / нуждаетесь в скриптах, поместите этот код:

<asp:Content ContentPlaceHolderID="HeadContent" runat="server">
    <% Html.RenderPartial("EditorScripts");  %>
</asp:Content>

Это не идеальное решение и не такое динамичное, как хотелось бы. Причиной использования частичного представления является то, что если вы решите обновить или добавить больше сценариев в эти представления, вам нужно будет обновить его только в одном месте.

Другим способом было бы иметь страницу Editor.Master, содержащую эти сценарии и другие специфичные для редактора вещи, а затем использовать этот мастер в качестве главной страницы Site.Master. Тогда все представления редактора будут иметь Editor.Master в качестве главной страницы.

НТН

...