Asp.net 是否有与CSS等效的ClientScriptManager.RegisterClientScriptInclude

Asp.net 是否有与CSS等效的ClientScriptManager.RegisterClientScriptInclude,asp.net,css,Asp.net,Css,该方法允许您向页面对象注册JavaScript引用(检查重复项) CSS引用是否有与此方法等效的方法 类似的问题也适用于,我使用css文件作为 您可以向ASP.Net codebehind类中的CSS文件添加标题链接,如下所示: HtmlLink link = new HtmlLink(); link.Href = "Cases/EditStyles.css"; link.Attributes.Add("type", "text/css"); link.Attributes.Add("rel",

该方法允许您向页面对象注册JavaScript引用(检查重复项)

CSS引用是否有与此方法等效的方法


类似的问题也适用于,我使用css文件作为

您可以向ASP.Net codebehind类中的CSS文件添加标题链接,如下所示:

HtmlLink link = new HtmlLink();
link.Href = "Cases/EditStyles.css";
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
this.Header.Controls.Add(link);
您可以预先迭代头部控件,查看它是否已经存在。所示示例来自我的一个项目中的页面加载,并且位于一个条件表达式中,该表达式仅在页面应处于“编辑”模式时添加EditStyles.css


对于ClientScriptManager.RegisterClientScriptBlock和ClientScriptManager.RegisterClientScriptResource,它们具有用于检查它们是否已注册的等效函数(例如IsClientScriptResourceRegistered)。

简短回答:不。您当然可以使用自己的函数(如CMPalmer建议的那样)获取CSS嵌入资源(正如Gulzar所建议的)并将它们嵌入到页面上

不过,作为最佳实践,我不确定您为什么要这样做。如果您正在制作一个具有大量CSS样式的可重用控件,我的建议是将类名硬编码到控件的符合标准的输出中,并随附一个建议的样式表。这为您的用户/客户提供了覆盖建议样式以满足其需要的选项,并且通常允许他们根据自己的需要管理CSS设置


分离样式与标记是一件好事——你已经走上了正确的路径,避免了各种内置的ASP.NET风格属性,但是你应该一直沿用它,并将CSS从你的.dll中删除。

一个想法:你可能想考虑“命名空间”。类名称,以避免与使用者可能已经使用的公共类名称发生冲突。例如

<div class="SmillerControls_Toolbar">
    <a class="SmillerControls_Button" ...>...</a>
    ...
</div>
我所做的是使用

<asp:Literal id="cssliteral" runat="server" /> 

在head中,然后在PageLoad上加载包含动态css脚本的StringBuilder

StingBuilder str = new StringBuilder();
str.Append("<style type="text/css">");
str.Append(".myclass {background-color:#" + mycolor);
str.Append("</style>");

cssLiteral.Text = str.ToString();
StingBuilder str=new StringBuilder();
str.Append(“”);
str.Append(“.myclass{背景色:#”+mycolor);
str.Append(“”);
cssLiteral.Text=str.ToString();

只需检查已注册脚本的存在性,如果发现它不存在,则您将知道这是首次创建控件。此时,您可以将指向所需css文件的文本控件拖放到页面中

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    With Page.ClientScript
        If Not .IsClientScriptIncludeRegistered("JQuery") Then 
            .RegisterClientScriptInclude("JQuery", "Scripts/jquery-1.4.2.min.js")
            Dim l As New Literal()
            l.Text = "<link href='Uploadify/uploadify.css' rel='stylesheet' type='text/css' />"
            sender.controls.add(l)
        End If
    End With
End Sub
Protected Sub Page_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
使用Page.ClientScript
如果不是.IsClientScriptIncludeRegistered(“JQuery”),则
.RegisterClientScriptInclude(“JQuery”、“Scripts/JQuery-1.4.2.min.js”)
Dim l作为新的Literal()
l、 Text=“”
sender.controls.add(l)
如果结束
以
端接头

希望这对其他人有所帮助。

是的,但在这种情况下,是否有一个干净的替代方案来替代ClientScriptManager.RegisterClientScriptResource以供CSS使用?请参阅此答案中的HeadContainsLink href方法:“查看是否已经存在”
StingBuilder str = new StringBuilder();
str.Append("<style type="text/css">");
str.Append(".myclass {background-color:#" + mycolor);
str.Append("</style>");

cssLiteral.Text = str.ToString();
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    With Page.ClientScript
        If Not .IsClientScriptIncludeRegistered("JQuery") Then 
            .RegisterClientScriptInclude("JQuery", "Scripts/jquery-1.4.2.min.js")
            Dim l As New Literal()
            l.Text = "<link href='Uploadify/uploadify.css' rel='stylesheet' type='text/css' />"
            sender.controls.add(l)
        End If
    End With
End Sub