Простая проблема ASP.NET/C# - События - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть класс, который наследуется от элемента управления LinkButton ASP.NET и включает свойство int «Value» для запоминания идентификатора базы данных при динамическом создании LinkButton. Это делается для того, чтобы при обратной передаче я мог загрузить некоторое содержимое на основе базы данных на основе этого идентификатора.

Мой вопрос: есть ли простой способ добиться этого в C #? Я просмотрел Интернет и получил много информации о делегатах и ​​пользовательской обработке событий, но это кажется слишком сложным для того, что мне нужно сделать. Должен ли я читать информацию о делегатах, обобщениях и событиях или просто переопределить событие ClickButtons Click, чтобы получить идентификатор и запросить базу данных?

EDIT

Я создаю свои элементы управления динамически, поэтому я не уверен, как связать событие с событием click динамически добавляемого элемента управления. Ниже приведены сведения о свойстве CommandArgument, но есть ли у кого-нибудь пример использования CommandArgument с динамически созданным элементом управления?

var lnkbtnTitle = new LinkButton();

            lnkbtnTitle.CssClass = "ABC";
            lnkbtnTitle.ToolTip = Description;
            lnkbtnTitle.Text = Name + ' ' + Version;
            lnkbtnTitle.CommandArgument = ID.ToString();
            pnlHelpGuidesView.Controls.Add(lnkbtnTitle);

Ответы [ 3 ]

4 голосов
/ 22 февраля 2010

Я не думаю, что вам нужно наследовать от linkButton, чтобы просто присоединить свойство «ID», у linkbutton есть свойство с именем «CommandArgument», которое вы можете использовать для хранения этого идентификатора, и отправлять его в Postback.

1 голос
/ 22 февраля 2010

Элемент управления LinkButton уже имеет для этой цели свойство CommandArgument . Все, что вам нужно сделать, это обработать события Click или Command, привести CommandArgument к int, и вы захватили идентификатор.

0 голосов
/ 22 февраля 2010

ОК, я решил свою проблему здесь, и это оказалось проблемой новичка, с которой я сталкивался раньше! Я полагал, что стоит опубликовать резолюцию здесь ради чьей-либо выгоды ...

КОГДА ВЫ СОЗДАЕТЕ ДИНАМИЧЕСКОЕ УПРАВЛЕНИЕ, ВЫ ДОЛЖНЫ СОХРАНИТЬ ИХ НА ПОСТБЕКЕ

Это всегда казалось мне нелогичным, но у меня была директива if (! IsPostBack) в моем коде создания элемента управления, что означало, что любые решения, которые я пробовал, не запускались. Это потому, что элемент управления больше не существует, потому что я не воссоздаю его при обратной передаче.

В ответ на мой собственный вопрос и принимая во внимание пункты, упомянутые здесь, следующий код работает ...

private void DrawHelpGuide(int ID, int Type, string Name, string Description, string Version, string URL)
    {
            var lnkbtnTitle = new LinkButton();

            lnkbtnTitle.CssClass = "HelpGuideTitle";
            lnkbtnTitle.ToolTip = Description;
            lnkbtnTitle.Text = Name + ' ' + Version;
            lnkbtnTitle.CommandArgument = ID.ToString();
            lnkbtnTitle.Click += new EventHandler(lnkbtnTitle_Click);
            pnlHelpGuidesView.Controls.Add(lnkbtnTitle);
        }

    void lnkbtnTitle_Click(object sender, EventArgs e)
    {
        var ClickedButton = (LinkButton)sender;
        var id = int.Parse(ClickedButton.CommandArgument);
    } 

Теперь я также понимаю, что различные версии, которые я написал ранее, хотя и были более сложными, также работали бы! В моем конкретном случае метод CommandArgument вполне адекватен, но я очень рад, что теперь я «понимаю» концепцию делегатов и событий намного больше, чем я делал ранее:)

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