UserControl с кнопкой, которая может обрабатывать несколько действий? - PullRequest
0 голосов
/ 21 декабря 2010

Я хочу разработать пользовательский элемент управления (наследуя UserControl), который содержит кнопку, которая при нажатии выполняет несколько действий.Эти действия должны быть определены где-то.Поэтому, когда я подаю в суд на элемент управления на page1.aspx, кнопка выполняет действие X, когда она используется на page2.aspx и кнопка там нажата, запускается действие Y и т. Д.это?

Спасибо:)

Ответы [ 4 ]

1 голос
/ 21 декабря 2010

Если поведение очень специфично для типа элемента управления, вы можете сделать следующее

Создать перечисление

public enum MyUserControlAction
{
    FirstAction = 0,
    SecondAction = 1,
    ThirdAction = 2
}

, а затем создать общедоступное свойство в вашем пользовательском элементе управления

public MyUserControlAction Action {get;set;}

затем в вашем пользовательском элементе управления обработчик нажатия кнопки

protected void btn_Click(object sender,EventArgs e)
{
    switch (this.Action)
    {
        case MyUserControlAction.FirstAction:DoSomething();break;
        case MyUserControlAction.SecondAction:DoSomethingElse();break;
        case MyUserControlAction.ThirdAction:DoSomethingAgain();break;
    }
}

затем, когда вы добавляете в форму

<cc1:MyUserControl runat="server" Action="FirstAction" ID="ctrl1" />
<cc1:MyUserControl runat="server" Action="SecondAction" ID="ctrl2" />
<cc1:MyUserControl runat="server" Action="ThirdAction" ID="ctrl3" />

, другое решение - выставить клик

public event EventHandler<EventArgs> Click;

protected virtual void OnClick()
{
     if (this.Click !=null)
     {
          this.Click.Invoke(this,EventArgs.Empty);
     }
}

затем нажмите кнопку

protected void btn_Click(object sender,EventArgs e)
{
    this.OnClick();
}

Затем вы можете обрабатывать нажатие кнопки как событие на пользовательском элементе управления и делать то, что вам нравится ...

1 голос
/ 21 декабря 2010

Рассмотрите возможность создания пользовательского элемента управления, который принимает «содержащийся» пользовательский элемент управления, который предоставляет известный интерфейс:

public interface IActionable
{
    void DoButtonAction(object param);
}

Затем создайте отдельный пользовательский элемент управления для каждой страницы, реализующей IActionable. Все, что нужно сделать контейнеру, это выполнить DoButtonAction() для содержащегося в нем элемента UserControl при нажатии кнопки. UserControl каждой страницы определяет, что на самом деле делает DoButtonAction().

0 голосов
/ 21 декабря 2010

Создайте свойство для вашего пользовательского элемента управления, например, просто int.

Затем в событии «Нажатие кнопки» обработайте событие по-разному в зависимости от значения свойства.

0 голосов
/ 21 декабря 2010

Можно присвоить значения свойству CommandArgument на каждой странице, а затем в зависимости от значения вы можете выполнить соответствующие действия.

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