从.cs更改css文件

时间:2011-03-02 12:48:07

标签: asp.net .net css

我有一个特定的控件gridview,我在其上应用特定的CSS文件,我想在我的.cs文件中的特定条件下更改此CSS,是否有那样做?

例如:

<ItemStyle CssClass ="normal"/>

我想在特定条件下更改.cs。

7 个答案:

答案 0 :(得分:1)

您可以将<style>标记及其必要的调整注入页面,而无需修改CSS文件。

只需在ASPX页面上创建一个文字控件,作为修改样式的占位符。从代码隐藏中,向文字渲染类似于以下内容:

Literal1.Text = "<style type=\"text/css\">.normal { background-color:red; }</style>";

...“normal”是您要修改的原始CSS类。 CSS的优点在于它首先应用所包含文件中设置的样式,然后在<style>标签中明确指定的任何“覆盖”样式。

答案 1 :(得分:1)

您的样式 不在.css文件中:您可以将文件更改为.aspx,也可以创建一个HttpHandler来提供CSS。

答案 2 :(得分:1)

你必须得到这样的东西呈现给HTML页面。

<style type="text/css">
  .itemstyle
  {
    /* whatever styles you need */
  }
</style>

这可以覆盖CSS文件中的任何内容。一种选择是在ASPX页面上放置一个Literal控件:

<asp:Literal ID="litStyle" runat="server" />

并使用它从后面的代码中写出必要的样式:

litStyle.Text = "<style type=\"text/css\">.itemstyle{" + myStyles + "}</style>";

答案 3 :(得分:1)

最好的方法是在静态css文件中设置不同的类,并更改gridview在代码隐藏(.cs)中使用的这些类中的哪些类。通过这种方式,您仍然可以获得缓存的css并与视图(.aspx)完全分离的好处。

的CSS:

.normal { background-color:white; }
.alternate { background-color:#EEE; }

代码隐藏

var css = SomeLogic() ? "normal" : "alternate";
gridView.RowStyle.CssClass = css;

答案 4 :(得分:1)

好吧,控件不负责管理CSS源文件及其对页面的添加,因此,简单的答案是不,你不能那样做

顺便说一下,有一些解决办法。

您可以通过添加服务器控件(例如,HtmlGenericControl)来包含来自控件的带有 style HTML元素的CSS文件,以及适当的属性和值,因此,如果容器控件需要某些特定的CSS文件,您可以在容器控件的生命周期中,在呈现它之前,将其添加到某些ASP的HTML头元素(标记为 runat =“server”属性)。 NET页面。

这样做的一个好方法应该是在web.config中创建一个配置部分,实现你自己的配置部分可能支持创建控件/页面和CSS样式表文件的依赖关系,所以,使用这种方法,你将能够在派生自System.Web.UI.Page类的实现中实现某些方法,该类可能会根据控件添加CSS文件:

<cssDependencies>
   <control type="YourNamespace.YourControl" cssFile="~/Styles/Default/YourControlStyle.css" />
<cssDependencies>

然后,您的CustomPageBase将拥有自己的“AddControl”方法,该方法应该在一些可以在PreRender方法中迭代的集合中注册其类型,因此,您可以根据控件的类型添加CSS文件。

我只是给你一些想法! :)


EDIT&amp;注意: 无论如何,这种方法和您的目标可能在性能优化方面存在问题。

最佳优化网站应将所有需要的CSS合并为一个,因此浏览器应在页面渲染过程中加载一个而不是多个。

我相信将所有CSS文件合并为一个可以通过“CSS文件和控件类型方法”实现,我建议你这样做,因为如果你不这样做,你可以用几十页来结束风格元素。

你听说过DotLess项目吗?在这里查看:http://www.dotlesscss.org/也许它可以用更少的努力为您提供更好的方法!

答案 5 :(得分:1)

动态CSS通常不受欢迎。

您应该在CSS中定义两个(或更多)类,然后根据需要在PreRender事件(或客户端)脚本中设置元素的ClassName属性。

答案 6 :(得分:1)

您的意思是GridView吗?

它没有和ItemStyle属性。但它内部的列确实可以。

所以你可以使用:

gv.Columns[0].ItemStyle.CssClass = "RedItem";

DataGrid有一个ItemStyle属性:

dg.ItemStyle.CssClass = "MoreThanNormalClass";

从你的问题中不清楚你想改变什么......

实施例

CSS类:

<style>
    .Normal{ background-color:Lime; }
    .Warning{ background-color:Red; }
</style>

ASP.NET标记:

<asp:DataGrid runat="server" id="dg" onitemdatabound="dg_ItemDataBound" >
    <ItemStyle CssClass="Normal" />
</asp:DataGrid>

C#代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    int[] someInts = { 1, 15, 20 };
    dg.DataSource = someInts;
    dg.DataBind();
}

protected void dg_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.DataItem != null)
    { 
        int v = (int)e.Item.DataItem ;

        if (v > 10 && v < 20)
        e.Item.CssClass = "Warning";
    }       
}

输出:

enter image description here