我在下面有这个非常简单的控制。在我使用此控件的页面上,我只想说: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;
}
}
答案 0 :(得分:2)
您不需要静态方法。在ASPX页面中声明用户控件时,可以直接通过ID引用它。
在ASPX中:
<uc:SomeUserControl ID="UserControl1" runat="server" ...>
在后面的代码中:
UserControl1.SetMessage("Some message");
在用户控件中,将方法更改为以下内容:
public void SetMessage(string Message)
{
lblMessage.Text = Message;
}
答案 1 :(得分:0)
静态方法无法访问控件实例中包含的项。例如;如果你有两个并发请求在运行;你调用静态方法;它会修改ucMessagePanel
类的哪个实例(这甚至绕过了提供的代码无法编译的问题)?
除非您使用静态属性的值并使用实例方法将其分配给控件,否则您无法使用静态属性编辑这些控件。
除非需要在请求线程之间共享,否则应避免在ASP.NET请求处理中使用static
。