ASP.net веб-сервер управления - PullRequest
0 голосов
/ 10 сентября 2009

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

    <asp:Label runat="server" ID="lblMessage" Font-Names="Verdana" Text="Hello" />
        <br />
    <asp:Button runat="server" ID="btnSubmit" text="click me!" onClick="btnSubmit_Click" />

и в коде файла:

    private void btnSubmit_Click(object sender, EventArgs e)
    {
        lblMessage.Text = "Goodbye";
    }

Но компилятор не может найти обработчик щелчка, если я не изменю доступ на защищенный.

Должны ли обработчики событий кнопки быть частными, и если да, то почему это не сработало в моем случае?

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

Заранее спасибо, О

Ответы [ 2 ]

4 голосов
/ 10 сентября 2009

Что может сбить с толку, так это то, что многие люди визуально создают свои веб-формы. Когда они хотят подключить обработчик щелчков к кнопке серверного элемента управления, они обычно либо дважды щелкают кнопку, либо выбирают ее в Visual Studio, нажимают клавишу F4, чтобы перейти к ее свойствам и установить события в этом окне. Любой из этих подходов имеет следующий эффект:

  1. В коде класса создается частный обработчик. Его имя - [контрольное имя] _ [событие]. В вашем случае это btnSubmit_Click.

  2. Также в файле code-behind у каждого элемента управления веб-сервера есть соответствующий защищенный член кода позади класса. Даже в Init недавно созданный обработчик ассоциируется с событием Click на серверном элементе управления следующим кодом:

    btnSubmit.Click + = btnSubmit_Click;

При таком подходе обработчик все еще может быть закрытым. Проблема возникает при попытке установить обработчик в самом файле ASPX. В этом случае вам придется обновить обработчик событий, чтобы он был не закрытым, как вы указали, или определить следующее на самой странице ASPX:

<script language="C#" runat="server">
  public void btnSubmit_Click(object sender, EventArgs e)
  {
    ..
  }
</script>

Частные методы / свойства класса code-behind не видны на странице ASPX.

1 голос
/ 10 сентября 2009

Обработчик события должен быть protected. Причина в том, что ASP.NET фактически генерирует новый класс, который наследуется от класса, который вы определяете в своем коде, вместо того, чтобы использовать сам класс.

В качестве альтернативы вы можете написать:

btnSubmit.Click += new EventHandler(btnSubmit_Click);

В обработчике Page_Load, но я бы не рекомендовал это. Я полагаю, что в VB.NET вы также можете использовать ключевое слово Handles, но оно не доступно в C #.

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