2011-08-19 76 views
0

我在下面有這個非常簡單的控制。在我使用此控件的頁面上,我只想說:ucMessagePanel.SetMessage(...),但它不允許我聲明靜態方法。我試着用靜態屬性來做這件事,而且工作得很好,但我不應該也能夠使用靜態方法?最好的方式來做用戶控制代碼?

<center> 
    <asp:Panel ID="pnlMessage" runat="server" > 
     <asp:Label ID="lblMessage" runat="server" /> 
    </asp:Panel> 
</center> 


public partial class ucMessagePanel : System.Web.UI.UserControl 
{   
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    public static void SetMessage(string message, string mssgCssClass) 
    { 
     lblMessage.Text = message; 
     pnlMessage.CssClass = mssgCssClass; 
    } 
} 

回答

2

你不需要靜態方法。當你在ASPX頁面中聲明用戶控件時,你可以直接用ID來引用它。

在ASPX:

<uc:SomeUserControl ID="UserControl1" runat="server" ...> 

而且在後面的代碼:

UserControl1.SetMessage("Some message"); 

在用戶控制的方法改變這樣的事情:

public void SetMessage(string Message) 
{ 
    lblMessage.Text = Message; 
} 
0

靜態方法無法訪問控件實例中包含的項目。例如;如果您有兩個併發請求正在運行;並調用靜態方法;哪一個ucMessagePanel類的實例會修改(甚至繞過所提供的代碼的問題無法編譯)?

沒有辦法可以用靜態屬性編輯這些控件,除非您正在使用靜態屬性的值並使用實例方法將其分配給控件。

您應該避免在ASP.NET請求處理中使用static,除非它是您需要在請求線程之間共享的東西。

相關問題