asp.net/vb.net System.Web.UI.WebControls.RepeaterItemEventArgs вопрос - PullRequest
0 голосов
/ 02 ноября 2018

Я действительно новичок в asp.net, поэтому, пожалуйста, прости меня, если это кажется действительно базовым вопросом. У меня есть страница asp.net, которая содержит ретранслятор. Вот код:

<div class="formRow">
    <asp:Repeater ID="uxStudentFormActive" runat="server">
        <ItemTemplate>
            <span style="font-weight:bold;" ><asp:Literal ID="uxFormName" runat="server" Text="#" /></span><br />
            <asp:TreeView ID="uxFormHistoryList" runat="server" Target="_blank" />              
        </ItemTemplate> 
    </asp:Repeater>
</div>

Вот субподразделение на моей странице vb.net, которое обрабатывает uxStudentFormActive.ItemDataBound:

Protected Sub uxStudentFormActive_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles uxStudentFormActive.ItemDataBound

    Dim dr As DataRowView = CType(e.Item.DataItem(), DataRowView)

    If Convert.ToInt32(dr("FormId")) = 29 Then
        ...
    End If

End Sub

Я не совсем уверен, как страница aspx взаимодействует со страницей vb.net. Мой вопрос: как мне узнать, откуда поступают значения для e, которые передаются в sub uxStudentFormActive_ItemDataBound на моей странице vb.net? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Спасибо @Jack за предоставленную мне дополнительную информацию об этом. Извините, если мой OP не был более понятным, я понял, что значения поступают со страницы .aspx, я на самом деле спрашивал, где устанавливаются значения, которые передаются как e в мою подпрограмму как e заполняется данными. Ответ пришел от просмотра идентификатора ретранслятора для ретранслятора, о котором я спрашиваю, uxStudentFormActive. Когда я искал этот идентификатор ретранслятора, мой код vb.net позади, я обнаружил, что источник данных для него был определен и связан в подпункте Page_Load. Отслеживание этого приводит меня к хранимой процедуре в моей базе данных, которой передаются данные сеанса, а e устанавливается на результаты хранимой процедуры.

0 голосов
/ 02 ноября 2018

С этой статьи MSDN об обработке событий в ASP.Net:

События [в ASP.Net] основаны на модели делегата ... Делегат - это тип, который содержит ссылку на метод ... Событие - это сообщение, отправленное объектом для сигнализации о возникновении действия. , Действие может быть вызвано взаимодействием с пользователем, таким как нажатие кнопки, или оно может быть вызвано некоторой другой программной логикой, такой как изменение значения свойства. Объект, который вызывает событие, называется отправителем события ... Данные, связанные с событием, могут быть предоставлены через класс данных события.

В вашем случае класс данных события равен RepeaterItemEventArgs.

Чтобы ответить на событие, вы определяете метод обработчика события в получателе события. Этот метод должен соответствовать подписи делегата для события, которое вы обрабатываете. В обработчике событий вы выполняете действия, которые требуются при возникновении события, такие как сбор пользовательского ввода после того, как пользователь нажимает кнопку. Чтобы получать уведомления о возникновении события, ваш метод-обработчик события должен подписаться на событие.

Читая это, вы могли бы сказать: "Ну, это хорошо, но что это значит?" В вашем проекте у вас, вероятно, есть набор свойств в верхней части страницы .aspx с именем AutoEventWireup. Вероятно, он установлен на true. Это свойство делает то, что кажется: оно автоматически связывает ваши события, так что вам не нужно. Вот как ваша страница .aspx знает, как взаимодействовать с файлом code-behind.

На вашей странице .aspx у вас есть управление репитером. В вашем файле code-behind у вас есть метод обработчика событий. Поскольку для AutoEventWireup установлено значение true, эти две вещи автоматически связываются вместе, если ваша сигнатура метода обработчика событий совпадает с сигнатурой делегата для этого события. В этом случае это событие ItemDataBound.

К вашему первоначальному вопросу, откуда берутся значения e? От отправителя!

Protected Sub uxStudentFormActive_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles uxStudentFormActive.ItemDataBound

В сигнатуре этого метода у вас есть два параметра: sender и e. Как описано в приведенной выше цитате, sender - это объект, который вызывает событие. В вашем случае это RepeaterItem. Поскольку повторитель, вероятно, содержит много таких объектов, событие может быть вызвано несколько раз. Аргумент события, e, генерируется из sender или RepeaterItem, который был привязан к данным и вызвал событие.

Вы можете узнать больше о RepeaterItemEventArgs и данных, доступных в MSDN .


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

...