0

因此,如果用户从 dropDownList 中选择一个值并单击按钮,则 ID 将传递给后面的代码(这是我想要的)例如

<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'。那么这是以类似的方式完成的吗?例如

<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?

4

1 回答 1

2

您应该使用CommandArgumentLinkBut​​ton 的属性将 id 传递给处理点击的方法。

所以你的LinkButton遗嘱现在看起来像这样:

<asp:LinkButton ID="AddNewBOQLink" runat="server" CommandArgument='<%# Bind("id")%>'  CssClass="bottomhyperlink">Change Prices</asp:LinkButton>

并且您想将以下属性添加到您的中继器:

<asp:Repeater .... OnItemCommand="repeater_Command" ...

处理命令事件的方法如下所示

void repeater_Command(Object Sender, RepeaterCommandEventArgs e) {        
   //retrieve the id like so
   int id = (int)e.CommandArgument;
}

另外,请注意我OnClick从 LinkBut​​ton 中删除了该属性。OnItemCommand由于您正在通过中继器的方法处理单击,因此不需要它。

此外,您可能需要考虑向CommandNameLinkBut​​ton 添加一个属性。这用于识别您希望执行的命令。目前,您只有一个命令:更改价格。但是将来您可能希望添加一个带有不同命令的附加按钮。

为此,请将以下属性添加到 LinkBut​​ton:

<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;
   }
}
于 2013-02-06T16:15:35.317 回答