2010-03-29 45 views
2

我在ASP.NET 3.5中编写了一个ServerControl,并且公开了CssClass,因此用户可以操纵控件的外观。我的问题是我想要建立合理的默认值,以便用户不必配置CSS,除非他想更改默认值。CssClass和ServerContol中的默认图像

我的具体问题是,我的控件发出html div,需要显示背景图片。我希望用户能够在CSS中指定不同的图像,但我想显示一个默认的背景图像,但我无法做到这一点。

整个服务器控件以div形式发出,类名设置为用户在CssClass中提供的值。需要背景图像的div被包含在这个外部div中,并带有它自己的类名。我目前在包含该控件的页面上的CSS中设置背景图像:

<style type="text/css"> 
     .cssClass .innerDiv { 
     background-image: url("http://...."); 
     } 
    </style> 

使用此功能绘制正确的图像。但是,如果它不存在,则不会绘制图像。

我想要的是ServerControl发出一些CSS来定义这些图像URL,这将被用户添加的任何css覆盖,并且该默认CSS将URL包含到嵌入的图像中ServerControl的程序集。

而且我不知道该怎么做。也不是,对于这个问题,我确定这是最好的方法。

任何想法?

回答

1

如果您需要多种样式,请使用CSS类(如HeaderCssClass,ItemCssClass)公开各种属性。另外,你可以检查一下,如果用户有一个指定的CSS类名,你可以使用它;否则,使用您的默认值,并从控件中省略自定义CSS。

在您的渲染逻辑中,您可以根据用户是否指定了任何内容,将正确的CSS类名作为DIV的属性进行渲染。所以,你可以这样做:

if (this.HeaderCssClass != null) 
    writer.AddAttribute("class", this.HeaderCssClass); 
else 
    writer.AddAttribute("class", "standard"); 

writer.RenderBeginTag("div"); 

而且只写你的标准的CSS如果HeaderCssClass为null。

+0

可能有需要设置的六种样式中的多个样式,这会使创建单独的属性变得乏味和容易出错。 OTOH,检查看到用户指定了CSS类名称将不起作用。如果用户包含一个CSS类,并且没有在其中定义背景图像URL,我仍然需要提供默认值。 – 2010-03-29 20:02:30

+0

这是大多数.NET框架控件的工作原理(尽管它们使用Style类而不是css类)。在某种程度上,如果用户忘记了背景图像url,那么他们有责任设置这个......这就是它与大多数自定义控件框架的关系。不知道你正在开发什么级别... – 2010-03-29 22:54:44