ASP.NET:从用户控件以编程方式创建新的CSS类?

时间:2011-06-30 16:28:47

标签: asp.net css ajax user-controls asp.net-ajax

我有一个UserControl,其中包含这个AJAX模式弹出扩展器:

<ajax:ModalPopupExtender ID="MPE" runat="server" 
 TargetControlID="btnChangePassword" PopupControlID="pnlPasswordChanging"
 BackgroundCssClass="modalBackground" DropShadow="true"
 CancelControlID="btnCancel" OnCancelScript="ULC_ChangePw_CancelBtnClick();" />

这里没什么特别的。问题来自BackgroundCssClass属性 - 它需要一个名为 modalBackground 的CSS类。不幸的是,我无法以回发后的方式从用户控件添加CSS类。

如果我将 modalBackground 类添加到 .ascx 页面:

<style type="text/css">
    .modalBackground
    {
        background-color: #A1A1A1;
        filter: alpha(opacity=70);
        opacity: 0.7px;
    }
</style>

...它会在首次加载时显示属性,但在后续回发后不会显示。当然,我可以在页面本身内定义 modalBackground ,或者在用户控件调用的独立CSS文件中定义,但这两种解决方案都不适用于我。

无法以编程方式创建CSS类并将其添加到页面中吗?基本上我正在寻找与Javascript的RegisterClientScriptBlock函数等效的CSS:

Dim controlNameScript = String.Format("<script type='text/javascript'> var AppMenuName = '{0}' </script>", Me.ClientID)
Me.Page.ClientScript.RegisterClientScriptBlock(myType, "ControlName", controlNameScript)

谢谢!

3 个答案:

答案 0 :(得分:1)

将此类包含在您在站点的母版页中引用的css文件或特定页面本身是标准的。为什么这对你不起作用?

答案 1 :(得分:1)

如果CSS是在.ASCX文件中定义的,那么每次都应该渲染它,回发与否。除非控件本身设置为Visible =“false”。

一种解决方法是在控件上的asp:Literal块中定义CSS代码。然后,您的控件可以公开一个公共函数,该函数只是将该文本的内容返回给调用者。如果主机要使您的控件不可见,他们可以使用该公共函数获取CSS代码,并将其放在页面的head部分中。这样,无论控件的可见性设置如何,CSS定义都应该始终存在。

在更大的方案中,Adam是正确的:最好尽可能将CSS代码保存在.CSS文件中。

答案 2 :(得分:0)

好的,这就是我解决问题所需的全部内容:

    Me.Page.Header.Controls.Add(
        New LiteralControl("<style type=""text/css""> .modalBackground {background-color: #A1A1A1; filter: alpha(opacity=70); opacity: 0.7px;} </style>"))