如何指定相对于当前母版页文件的路径

时间:2011-12-02 16:04:01

标签: asp.net directory master-pages

我是asp.net的新手,但Master Pages似乎做了我需要的东西 - 允许我在运行时配置不同的模板/演示文稿/样式,所以我的应用程序可能会通过选择不同的母版页来呈现不同的外观和感觉。每个母版页都位于自己的文件夹中,其中包含一组为该模板定制的图像"模板" - 然后我希望在内容页面中引用位于当前所选母版页的文件夹中的各种图像,例如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="&gt;&gt;" 
        PreviousPageText="&lt;&lt;" />
    <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 in码)。

我发现尝试使用主题需要比我开始时更多的编码,因为我必须将整个控件定义包含在皮肤文件中,而不仅仅是图像url属性,然后我必须在每个中复制该代码单一主题/皮肤。如果我碰巧想要一个具有不同按钮和/或数字字段配置的DataPager,那么我也必须在每个皮肤文件中复制这些变体。如果我以后做出改变,我将不得不记住在所有皮肤上做出改变 - 严重地违背了将代码从皮肤上分离的目的。

我的应用程序运行多个项目,每个项目可以选择自己的模板。对于整个应用程序,我想说:如果当前项目使用TemplateX,则使用文件夹/ TemplateX / img /中的图像,如果选择了TemplateY,则使用/ TemplateY / img /中的图像。如您所知,不能总是依赖CSS来确定要在哪里使用的图像,因此我们必须能够将图像引用直接放在HTML输出中。

在我开发的自定义ISAPI DLL Web系统中,我只使用了一个替换字符串,如&#34; [#HTML.Template] /img/prev.png"将模板文件夹粘贴在图像URL前面。是否有一种方法可以挂钩自定义.aspx预处理器来手动替换所有的事件,如上例所示,&#34;&lt;&lt;当前的主根&gt;&gt;&#34;使用当前选择的文件夹?

1 个答案:

答案 0 :(得分:0)

尝试使用类似这样的东西

var path = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath;