2011-06-30 47 views
0

我有一個包含,除其他事物的用戶控件,這AJAX模式彈出擴展:ASP.NET:從用戶控件以編程方式創建新的CSS類?

<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類並將其添加到頁面?基本上,我正在尋找一個CSS equivilant到JavaScript的RegisterClientScriptBlock功能:

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

謝謝!

回答

1

如果在.ASCX文件中定義了CSS,那麼它應該每次都呈現,不管是回發還是不回發。除非控件本身設置爲Visible =「false」。

一種解決方法是在控件的asp:Literal塊中定義CSS代碼。然後,您的控件可以公開一個公共函數,該函數只是將該文本的內容返回給調用者。如果主機要讓您的控件不可見,他們可以使用該公共函數獲取CSS代碼,並將其放在頁面的頭部。這樣,無論控件的可見性設置如何,CSS定義都應該始終存在。

在更大的方案中,Adam是正確的:儘可能將CSS代碼保存在.CSS文件中。

+0

謝謝,這是我正在尋找的答案 - 使用文字控制應該爲我工作。 (控件不是隱形的,但它在更新面板中,如果這有什麼不同)。 –

+0

很高興我能幫上忙!這看起來很奇怪,CSS不會被渲染 - 我不知道任何UpdatePanel特定的行爲會導致這種情況發生;儘管他們有很多古怪的行爲,並且在大多數ASP.NET圈子中都失寵了。如果你最終做了更多的調試以找到根本原因,我肯定會對你發現的東西感興趣。最好的祝願! – mikemanne

1

將此類包含在您在網站母版頁中引用的css文件或特定頁面本身中是標準的。爲什麼這不適合你?

+0

它正在通過不同的網絡應用程序使用,所以他們不會neccesarily具有任何公共CSS文件。 –

0

好了這裏的一切,我需要解決我的問題:

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