У меня есть кнопка подтверждения, созданная в классе, отличном от кода страницы 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.

Я хочу, чтобы событие, запускаемое при нажатии одной из этих кнопок, переносилось обратно в код страницы 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
user3636407 23 Сен 2018 в 07:50

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);

    }
}
1
Masoud Keshavarz 23 Сен 2018 в 11:51