我继承了一个我正在测试的VB.Net应用程序而且ItemCommand事件没有触发......它是一个VB.Net 4.0应用程序。
我在网上搜索了这个错误,并检查了应用程序中的代码。
我知道这个事件应该在page_load事件之后在回发上触发。但是,当我单击ImageButton(强制回发并希望执行ItemCommand事件)时,Page.IsPostBack属性仍设置为FALSE,从而永远无法执行ItemCommand事件。我不知道为什么这个属性仍然会设置为FALSE。显然,我需要一种方法来向页面表明正在发生回发。 ImageButton应该处理这个问题,因为它有runat =“server”标记。
以下是代码段。有人可以告诉我,为了触发Item命令我需要做什么吗?我相信,我上面所说的是真的。我不知道为什么在页面加载后我按下ImageButton,属性仍然会被设置为FALSE。
HTML
<asp:DataList ID="lstReferrals" runat="server" DataKeyField="ReferringAffiliateID"
OnItemCommand="lstReferrals_ItemCommand" CellPadding="4" Summary="Referral Design Table"
Width="800"><ItemTemplate>
<tr class="small" bgcolor="#FFFFFF">
<td>
<asp:ImageButton ID="btnSelect" AlternateText="Select" ImageUrl='<%# NodeImage(1) %>'
CommandName="select" runat="server" />CODE BEHINDPrivate Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
If Not (Request.Params("ItemIndex") Is Nothing) Then
itemIndex = Int32.Parse(Request.Params("ItemIndex"))
Else
itemIndex = Convert.ToInt32(Null.SetNull(itemIndex))
End If
If Not Page.IsPostBack Then
LoadReferrals()
If Not Null.IsNull(itemIndex) Then
lstReferrals.SelectedIndex = itemIndex
LoadReferrals()
End If
End If
End Sub
Protected Sub lstReferrals_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles lstReferrals.ItemCommand
Try
errormessage.Visible = False
' Determine the command of the button (either "select" or "collapse")
Dim command As String = CType(e.CommandSource, ImageButton).CommandName
' Update asp:datalist selection index depending upon the type of command
' and then rebind the asp:datalist with content
Select Case command
Case "collapse"
lstReferrals.SelectedIndex = -1
LoadReferrals()
Case "select"
lstReferrals.SelectedIndex = e.Item.ItemIndex
LoadReferrals()
答案 0 :(得分:1)
我需要在page_load方法中添加一个事件处理程序,它将OnItemCommand事件设置为触发:
lstProducts.ItemCommand += new DataListCommandEventHandler(lstProducts_ItemCommand);
在C#中,我注意到有时aspx文件并不总是触发事件触发。例如,如果你有OnItemCommand =“abc”,它就不会被激活(无论出于何种原因)。如果是这种情况,您应该强制asp.net在后面的代码中添加事件处理程序。