【发布时间】:2020-01-21 23:17:55
【问题描述】:
对此有点困惑。我的印象是,如果您将服务器控件添加到转发器的 ItemTemplate 中,那么分配给这些控件的 ID 将在回发中持续存在,并且将保持状态。但它似乎没有发生。这是我的 ItemTemplate:
<asp:HiddenField ID="hidPending" runat="server" value="<%# DataBinder.Eval(Container.DataItem, "Id")%>" />
<td class="leftpadd"><uc:restrictedtext ID="uclblCategory" runat="server" Width="125" /></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "SelectedOptions")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "Price.IncludingTax", "{0:C}")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "ExtrasCost", "{0:C}")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><%# DataBinder.Eval(Container.DataItem, "Quantity", "{0:000}")%></td>
<td style="border-left:1px solid #528ABD;" class="leftpadd"><asp:CheckBox ID="chkPendingItems" runat="server" /></td>
填充良好。我希望用户能够使用复选框从中继器中选择某些项目,并在单击中继器外部的按钮时“处理”它们(即对这些项目执行一些数据操作)。这是我的按钮点击代码:
Private Sub lnkPendingProcessSelected_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lnkPendingProcessSelected.Click
For Each rItem As RepeaterItem In rptPendingItems.Items
If rItem.ItemType = ListItemType.Item Or rItem.ItemType = ListItemType.AlternatingItem Then
Dim chk As CheckBox = DirectCast(rItem.FindControl("chkPendingItems"), CheckBox)
If chk.Checked Then
Dim orderItemId As Integer
Dim hid As HiddenField = DirectCast(rItem.FindControl("hidPending"), HiddenField)
orderItemId = CInt(hid.Value)
My.Application.ManagerFactory.OrderManagerInstance.ChangeOrderItemStatus(orderItemId, Concrete.Cms.DataTransferObjects.OrderItemStatus.Processing)
End If
End If
Next
End Sub
但是,如果您逐步执行此操作,则会找到并正确分配复选框,但其 Checked 属性始终为 False。有人对为什么不维护状态以及我能做些什么有任何建议吗?
【问题讨论】:
-
您是否也将转发器绑定到回发?
-
是的。每个 Page_Load。不幸的是,我想我可能需要使用一些 javascript 来执行此操作。
-
为什么要在每个 page_load 上对您进行数据绑定?我在这方面的“流程”:第一次请求数据绑定,接收回发,处理收到的复选框,然后我可以绑定复选框。否则会有例如如果您的数据源中不再存在 checkox 值,则会出现问题 ...