我有一个确认按钮正在与要与按钮进行交互的aspx页面后面的代码不同的类中创建。
基本上,说我有这个确认类:
public class Confirmation
{
public void GenerateButtons()
{
Button btnConfirm = new Button();
btnConfirm.Text = "Confirm";
btnConfirm.CommandName = "Variable1,Variable2,Variable3";
_Default def = new _Default();
btnConfirm.Click += new EventHandler(def.btnConfirmBook_Click);
}
}
上面的代码是该代码的非常解释版本。但是,会在循环中生成多个按钮并将其添加到表中。该表显示在下面提到的Default.aspx页上。对于表中的每一行,CommandName
属性的值包含不同的值。
我正在使用的aspx页面是Web Forms .NET Web App中的“默认”页面。
我希望单击这些按钮之一时触发事件,以将其带回到Default.aspx页面(Default.aspx.cs)后面的代码中。
这就是Default.aspx.cs中的内容:
public void btnConfirm_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
DisplayConfirmation(btn.CommandName);
}
protected void DisplayConfirmation(string result)
{
// I split result and manipulate it as necessary to get a confirmationText string
pnlMainPanel.Visible = false; // This is where it throws NullReferenceException
pnlConfirmationPanel.Visible = true;
lblConfirmationText.Text = confirmationText;
}
我假定尝试更改面板的可见性时会抛出NullReferenceException,因为我创建了_Default类的新实例,以便可以在第一个代码段的最后一行中设置EventHandler。
但是我不知道如何使它工作。
答案 0 :(得分:1)
您假设正确。不要创建_Default类的新实例。
ASPX:
<form id="form1" runat="server">
<div>
<asp:Panel ID="Panel1" runat="server">
make me invisible;
</asp:Panel>
</div>
</form>
隐藏代码:
protected void Page_Load(object sender, EventArgs e)
{
GenerateButtons();
}
public void GenerateButtons()
{
AnotherClass anotherClass = new AnotherClass(this);
}
public void btnConfirmBook_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
DisplayConfirmation();
}
protected void DisplayConfirmation()
{
Panel1.Visible = false;
}
另一个班级:
public class AnotherClass
{
public AnotherClass(Default def)
{
Button btnConfirm = new Button();
btnConfirm.Text = "Confirm";
btnConfirm.CommandName = "Variable1,Variable2,Variable3";
def.Form.Controls.Add(btnConfirm);
btnConfirm.Click += new EventHandler(def.btnConfirmBook_Click);
}
}