是否有CSS的ClientScriptManager.RegisterClientScriptInclude等效项
使用ClientScriptManager.RegisterClientScriptInclude方法可以向Page对象注册JavaScript引用(检查重复项)。
CSS引用是否有与此方法等效的方法?
类似的问题适用于ClientScriptManager.RegisterClientScriptBlock和ClientScriptManager.RegisterClientScriptResource
解决方案
回答
我已经使用css文件作为嵌入式资源。
回答
我们可以在ASP.Net代码中的类后面的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);
我们可以事先遍历头控件以查看它是否已经存在。所示示例来自我的一个项目中的Page_Load,并且位于条件表达式中,该条件表达式仅在假定页面处于"编辑"模式时才添加EditStyles.css。
对于ClientScriptManager.RegisterClientScriptBlock和ClientScriptManager.RegisterClientScriptResource,它们具有等效的功能来检查它们是否已被注册(例如IsClientScriptrResourceRegistered)。
回答
简短的回答:不。我们当然可以滚动自己的函数(如CMPalmer所建议的)来获取CSS嵌入式资源(如Gulzar所建议的)并将它们嵌入页面中。
但是,作为最佳实践,我不确定我们为什么要这样做。如果要制作具有很多CSS样式的可重用控件,我的建议是将类名硬编码到控件的符合标准的输出中,并随控件一起提供建议的样式表。这使用户/客户可以选择覆盖建议的样式以适合他们的需求,并且通常允许他们根据自己的意愿管理CSS设置。
将样式与标记分开是一件好事,我们已经在避免各种内置ASP.NET样式属性的道路上走了一条正确的道路,但是我们应该始终采用这种方式,并将CSS保留在.dll中。
回答
再想一想:我们可能要考虑对类名进行"命名间隔",以避免与使用者可能已经在使用的常见类名发生冲突。例如。
<div class="SmillerControls_Toolbar"> <a class="SmillerControls_Button" ...>...</a> ... </div>
或者我们可以将整个内容包装在一个"命名空间"类中,然后将CSS编写为:
<div class="SmillerControls"> <div class="Toolbar"> <a class="Button" ...>...</a> </div> </div>
你的CSS就像
div.SmillerControls div.Toolbar { ... } div.SmillerControls div.Toolbar a.Button { ... }
回答
我要做的是使用
<asp:Literal id="cssliteral" runat="server" />
首先,然后在PageLoad上使用StringBuilder包含动态css脚本。
StingBuilder str = new StringBuilder(); str.Append("<style type="text/css">"); str.Append(".myclass {background-color:#" + mycolor); str.Append("</style>"); 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
希望这对某人有帮助。