2011-08-19 70 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,除非它是您需要在请求线程之间共享的东西。

相关问题