Как передать аргумент команды при вызове функции ссылки на кнопку динамически? (C #) - PullRequest
4 голосов
/ 07 июля 2010

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

protected void FunctionName(object sender, EventArgs e)
{
 ...
}

Теперь у меня есть около 4-5 кнопок ссылок, которые я использую для вызова той же функции, но просто фильтрую содержимое с помощью аргумента команды, например:

<asp:LinkButton ID="lbAll" runat="server" Text="All"
                        CommandArgument="all" OnClick="FunctionName"></asp:LinkButton>
<asp:LinkButton ID="lbTop" runat="server" Text="Top" 
                        CommandArgument="top" OnClick="FunctionName"></asp:LinkButton>
(...)

Теперь у меня есть выпадающий список, в котором нужно сделать то же самое по существу (только для двух выбранных значений), мне просто нужно вызвать эту функцию и передать аргумент «all» или «top» в функцию:«FunctionName»

это в C #

Я пытался вызвать эту функцию как

FunctionName(this, New EventArgs());

, но я не знаю, как передать аргумент?

Есть идеи по этому поводу?Спасибо!

Ответы [ 3 ]

9 голосов
/ 07 июля 2010

Передайте LinkButton с правильным CommandArgument вместо этого:

FunctionName(lbAll, EventArgs.Empty)

Но вы действительно должны использовать событие OnCommand вместо OnClick. OnCommand имеет CommandEventArgs в качестве второго параметра. Таким образом, вы можете получить их с помощью e.CommandArgument в методе. И вызвать метод width:

FunctionName(this, new CommandEventArgs("CommandName", "CommandArgument"));
5 голосов
/ 07 июля 2010

Редактирование для наглядности

Ваш обработчик события click будет иметь два параметра: отправителя и объект args события. Отправитель - это объект, вызвавший событие (кнопка ссылки). В этом обработчике событий вы можете привести отправителя к нужному типу объекта и получить доступ к его свойствам.

((LinkButton)Sender).CommandArgument

Используя этот метод, вам не нужно явно передавать свой аргумент, вы просто получаете его от отправителя.

В качестве альтернативы (и, возможно, лучше) вы можете использовать обработчик события OnComand. Посмотрев уже используемое свойство в http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandargument.aspx, вы увидите, что этот обработчик событий получает параметр CommandEventArgs, у которого есть свойство, предоставляющее объект CommandParameter. например:

void LinkButton_Command(Object sender, CommandEventArgs e) 
      {
         Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument;
      }

(с этой страницы MSDN).

2 голосов
/ 07 июля 2010

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

Я хотел бы предложить вам реорганизовать обработчик событийвынуть функциональность и поместить ее в отдельный метод или два.например, в псевдокоде:

protected void FunctionName(object sender, EventArgs e)
{
    if (top)
        DoTop();
    else if (all)
        DoAll();
}

private void DoTop()
{
//do stuff
}

private void DoAll()
{
//Do different stuff
}

Это должно упростить вызов нужного вам кода.Хотя я не уверен, что я подозреваю, что считается плохой практикой вызывать обработчик событий только потому, что вам нужны некоторые его функции.Это, конечно, выглядит больше работы, чем нужно.:)

Конечно, вы могли бы вместо этого иметь метод, который принимает параметр, а затем обрабатывает его соответствующим образом (эффективно выделяя все в FunctionName).

Думаю, это лучше отвечает на ваш вопрос.Если нет, я просто пойду домой.; -)

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