0

I want to include certain .js and .css files only on pages that need them.

For example, my EditorTemplate DateTime.ascx needs files anytimec.js and anytimec.css.

That template is applied whenever I use either the EditorFor or EditorForModel helper methods in a view for a model with a DateTime type value.

My technique:

I've put this condition into the <head> section of my master page. It checks for a DateTime type property in the 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>
<% } %>

This has two problems:

  1. Fails if I have nested child models of type DateTime

  2. Unnecessarily triggered by views without EditorFor or EditorForModel methods (example: DisplayForModel)

How can I improve this technique?

4

2 回答 2

1

就个人而言,我会使用局部视图和 ASP 内容占位符。

在 Views/Shared 中有一个局部视图EditorScripts.ascx,其中包含定义要包含在编辑页面中的脚本的标签。

<head>然后在 Site.Master标记中放置一个占位符,如下所示:

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

在您想要/需要脚本的任何视图中,放置以下代码:

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

这不是一个完美的解决方案,也没有你想要的那样动态。使用局部视图的原因是,如果您决定更新或向这些视图添加更多脚本,那么您只需在一个位置更新它。

另一种方法是拥有一个Editor.Master包含这些脚本和其他编辑器特定内容的页面,然后让该母版使用它Site.Master作为母版页。然后所有编辑器视图都将Editor.Master作为它们的母版页。

高温高压

于 2010-05-21T04:34:22.133 回答
1

我认为Telerik 网络资产管理器可以让你完成你想要的并且是开源的。

于 2010-07-19T13:58:41.117 回答