asp.net/vb.net System.Web.UI.WebControls.RepeaterItemEventArgs 问题

asp.net/vb.net System.Web.UI.WebControls.RepeaterItemEventArgs question

我是 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 页面交互。我的问题是如何找出 vb.net 页面中传递给子 uxStudentFormActive_ItemDataBounde 值的来源?提前致谢。

来自 this MSDN 关于处理 ASP.Net 中的事件的文章:

Events [in ASP.Net] are based on the delegate model...A delegate is a type that holds a reference to a method... An event is a message sent by an object to signal the occurrence of an action. The action could be caused by user interaction, such as a button click, or it could be raised by some other program logic, such as changing a property’s value. The object that raises the event is called the event sender... Data that is associated with an event can be provided through an event data class.

在您的情况下,事件数据 class 是 RepeaterItemEventArgs

To respond to an event, you define an event handler method in the event receiver. This method must match the signature of the delegate for the event you are handling. In the event handler, you perform the actions that are required when the event is raised, such as collecting user input after the user clicks a button. To receive notifications when the event occurs, your event handler method must subscribe to the event.

读到这里,您可能会说 "Well that's well and good, but what does it mean?" 在您的项目中,you probably have a property set 在名为 AutoEventWireup 的 .aspx 页面顶部。它可能设置为 true。这个 属性 看起来像什么:它会自动连接您的事件,因此您不必这样做。这就是您的 .aspx 页面知道如何与代码隐藏文件交互的方式。

在您的 .aspx 页面上,您有转发器控件。在您的代码隐藏文件中,您有事件处理程序方法。因为您已将 AutoEventWireup 设置为 true,所以只要您的事件处理程序方法签名与该事件的委托签名相匹配,这两件事就会自动 link 结合在一起。在这种情况下,该事件是 ItemDataBound

对于您最初的问题,e 的值从何而来?来自发件人!

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

在此方法签名中,您有两个参数:sendere。如上面的引用所述,sender 是引发事件的对象。在您的例子中,这是 RepeaterItem。由于转发器可能包含许多此类对象,因此可以多次引发该事件。事件参数 e 是从 sender 或数据绑定并导致事件触发的 RepeaterItem 生成的。

您可以在 MSDN 上阅读有关 RepeaterItemEventArgs 和可用数据的更多信息。


作为旁注,您可以将 AutoEventWireup 设置为 false 并手动将 link 中详细描述的事件连接到 AutoEventWireup [=52 上的 MSDN 文章=].

感谢@Jack 让我对此有了更深入的了解。很抱歉,如果我的 OP 不是很清楚,我确实知道这些值来自 .aspx 页面,我实际上要问的是作为 e 传递到我的子程序中的值在哪里正在设置,e 如何填充数据。答案来自查看我所询问的转发器的转发器 ID,uxStudentFormActive。当我在我的 vb.net 代码后面搜索此转发器 ID 时,我发现它的数据源已在 Page_Load 子中定义和绑定。跟踪这一点让我找到了我的数据库中的一个存储过程,该存储过程正在传递会话数据,并且 e 被设置为存储过程的结果。