Добавить обработчик события click для кнопки, которая была динамически создана в другом классе - PullRequest
0 голосов
/ 23 сентября 2018

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

Но я не знаю, как заставить это работать.

1 Ответ

0 голосов
/ 23 сентября 2018

Вы приняли правильно.Не создавайте новый экземпляр класса _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);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...