2

我对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 页面中e传递给 sub的值uxStudentFormActive_ItemDataBound是从哪里来的?提前致谢。

4

2 回答 2

2

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

[在 ASP.Net 中] 事件基于委托模型...委托是一种保存对方法的引用的类型...事件是对象发送的用于表示动作发生的消息。该操作可能是由用户交互引起的,例如按钮单击,也可能是由其他一些程序逻辑引发的,例如更改属性的值。引发事件的对象称为事件发送者...与事件关联的数据可以通过事件数据类提供。

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

要响应事件,您在事件接收器中定义事件处理程序方法。此方法必须与您正在处理的事件的委托签名相匹配。在事件处理程序中,您执行引发事件时所需的操作,例如在用户单击按钮后收集用户输入。要在事件发生时接收通知,您的事件处理程序方法必须订阅该事件。

读到它,你可能会说“这很好,但这是什么意思?” 在您的项目中,您可能在 .aspx 页面的顶部设置了一个名为AutoEventWireup. 它可能设置为true. 这个属性看起来像:它自动连接你的事件,这样你就不必这样做了。这就是您的 .aspx 页面知道如何与代码隐藏文件交互的方式。

在您的 .aspx 页面上,您可以控制中继器。在您的代码隐藏文件中,您有您的事件处理程序方法。因为您已AutoEventWireup设置为 true,所以只要您的事件处理程序方法签名与该事件的委托签名匹配,这两件事就会自动链接在一起。在这种情况下,该事件是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 生成的。

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


作为旁注,您可以设置为 false 并手动连接事件,如该属性AutoEventWireup的 MSDN 文章链接中的深入描述。AutoEventWireup

于 2018-11-02T17:49:35.983 回答
0

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

于 2018-11-02T18:20:14.850 回答