因此,如果用户从dropDownList中选择一个值并单击该按钮,则ID将传递给后面的代码(这是我想要的位置) E.g。
<asp:DropDownList ID="DropDownList" runat="server" AppendDataBoundItems="true" DataTextField="Company_Name" DataValueField="id">
<asp:ListItem Text="---Select---" Value="0" />
</asp:DropDownList>
因此dataValueField将传递DD中所选记录的“id”。
然而,在同一页面上,我使用转发器显示先前从下拉列表中选择的记录,在每条记录旁边我有一个“更改价格”按钮,我想在点击时执行任务,一切正常但我所需要的只是同一个'id'。 这是以类似的方式完成的吗? E.g
<asp:Repeater ID="repeaterShowName" runat="server">
<HeaderTemplate>
<tr>
<th>
<asp:Label ID="SubConName" Text="Current SubContractors" runat="server"></asp:Label>
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="SubCon" Text='<%# Bind ("Company_Name") %>' runat="server"></asp:Label>
</td>
<td>
<asp:LinkButton ID="AddNewBOQLink" runat="server" OnClick="EditPricesForSubContractor" CssClass="bottomhyperlink">Change Prices</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
//所以我在链接按钮中添加DataValueField =“id”,所以当用户选择名称旁边的超链接时,它会自动拥有'id?
答案 0 :(得分:2)
您应该使用LinkButton的CommandArgument
属性将id传递给处理点击的方法。
所以你的LinkButton
现在看起来像这样:
<asp:LinkButton ID="AddNewBOQLink" runat="server" CommandArgument='<%# Bind("id")%>' CssClass="bottomhyperlink">Change Prices</asp:LinkButton>
并且您希望将以下属性添加到Repeater:
<asp:Repeater .... OnItemCommand="repeater_Command" ...
处理命令事件的方法将如下所示
void repeater_Command(Object Sender, RepeaterCommandEventArgs e) {
//retrieve the id like so
int id = (int)e.CommandArgument;
}
另请注意,我从LinkButton中删除了OnClick
属性。当您通过转发器的OnItemCommand
方法处理点击时,不需要它。
此外,您可能需要考虑在LinkButton中添加CommandName
属性。这用于标识您要执行的命令。目前,您只有一个命令:更改价格。但是将来你可能想要添加一个带有不同命令的附加按钮。
为此,请将以下属性添加到LinkButton:
<asp:LinkButton ... CommandName="ChangePrice" ...
并修改repeater_Command
方法以处理CommandName
。像这样:
void repeater_Command(Object Sender, RepeaterCommandEventArgs e) {
switch(e.CommandName)
{
case "ChangePrice":
//retrieve the id like so
int id = (int)e.CommandArgument;
break;
}
}