如何在Asp.net中找到主题文件夹?

时间:2009-03-25 03:37:45

标签: asp.net

我动态绑定了一些图像控件,但没有设置图像URL。当我使用皮肤文件然后设置SkinId时,我收到以下错误:

The 'SkinId' property can only be set in or before the Page_PreInit event for static controls. For dynamic controls, set the property before adding it to the Controls collection.

如何获取虚拟主题的位置?

1 个答案:

答案 0 :(得分:1)

在标记上设置SkinId

<asp:Image runat="server" id="LogoImage" SkinId="LogoImage" />

要以编程方式设置它,您需要在PreInit事件

上进行设置
public void Page_PreInit(object sender, EventArgs e)
{
  LogoImage.SkinID = "LogoImage";
}

这是一篇用于以编程方式设置SkinId的博客文章 http://blogs.conchango.com/simonevans/archive/2005/06/09/How-to-programmatically-assign-a-SkinID-to-a-control-while-using-a-master-page-in-ASP.net-2.0.aspx

最后,如果您只是在查找文件夹,则取决于您使用的是Theme还是StylesheetTheme

var path = "~/App_Themes/" + Page.Theme + "/images";
var path = "~/App_Themes/" + Page.StylesheetTheme + "/images";

更新

如果您在Grid中执行此操作,请使用自定义绑定方法

<asp:Image runat="server" id="myImage" ImageUrl='<%# GetThemedImage(((Product)Container.DataItem).Image)%>' />

然后在代码隐藏

public string GetThemedImage(string image)
{
     return "~/App_Themes/" + Page.Theme + "/images/" + image;
}