как я могу реализовать метод пользовательского элемента управления вне пользовательского элемента управления?

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

Я пробовал следующее в файле пользовательского элемента управления .cs:

    protected void nextPage_Click(object sender, EventArgs e) {

        submitData();

        Response.Redirect("completed.aspx");
    }

    protected abstract void submitData();

Но я не знаю, где должен быть реализован метод submitData.

Это как заполнитель для метода.


person draw    schedule 03.07.2011    source источник


Ответы (3)


Ваш элемент управления должен выставлять событие. Например, SubmitClicked. Чем в контроле, который его содержит, вы подписываетесь на это событие и делаете все, что пожелаете. Если у вас открыто событие, вы можете прикрепить к нему столько обработчиков событий, сколько захотите.

Это то, что asp:Button уже делает. Он предоставляет событие Click, а на странице aspx вы просто подписываетесь на это событие и реализуете обработчик событий в своем коде позади файла.

person Piotr Perak    schedule 03.07.2011

Это будет абстрактный класс. Вы никогда не сможете создать их экземпляр, вы должны создать свой собственный класс, который наследуется от него, и реализовать абстрактные методы и свойства. Например:

public class MySubmitButton : SubmitButton {
  protected override void submitData() {
    // do somthing
  }
}
person IanNorton    schedule 03.07.2011
comment
Это плохо, потому что каждый раз требуется новый класс. Вам нужен другой эффект после клика. Кнопка в asp.net уже имеет событие Clicked, так зачем создавать какие-то странные решения? - person Piotr Perak; 03.07.2011

Попробуйте что-то вроде делегата функции:

using System;

namespace ConsoleApplication1
{
    public delegate void FunctionToBeCalled();

    public class A
    {
        public FunctionToBeCalled Function;

        public void Test()
        {
            Function();
            Console.WriteLine("test 2");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A instanceA = new A();
            instanceA.Function = TheFunction;
            instanceA.Test();
        }

        static void TheFunction()
        {
            Console.WriteLine("test 1");
        }
    }       

}
person Denis Biondic    schedule 03.07.2011