在 Repeater 的 ItemCommand 中从 DDL 访问 SelectedItem
Accessing SelectedItem from DDL within Repeater's ItemCommand
大家好 — 我正在尝试从 Repeater 中的 DropDown 列表访问 SelectedItem 值,但我收到了抛出的 Null 异常。该转发器将迭代 10 "products" 以上。这是我的 Web 表单中的代码:
<asp:repeater ID="rptProducts" runat="server" OnItemDataBound="rptProducts_ItemDataBound" OnItemCommand="rptProducts_ItemCommand">
<ItemTemplate>
<div class="col-md-8 col-md-offset-2 product">
<img src="<%# Eval("ImageFile") %>" class="col-xs-12" alt="<%# Eval("Name") %> Product Image"/>
<h3><%# Eval("Name") %></h3>
<p><%# Eval("ShortDescription") %></p>
<asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Add to Cart" CommandName="click" CommandArgument='<%# Eval("Name") %>' UseSubmitBehavior="false" />
</div>
</ItemTemplate>
</asp:repeater>
以及我尝试访问 DropDownList1 的 SelectedItem 值的 .cs 文件中的代码。
protected void rptProducts_ItemCommand(object sender, CommandEventArgs e)
{
Repeater rpt = (Repeater)sender;
DropDownList productDDL = (DropDownList)rpt.Items[0].FindControl("DropDownList1");
int Qty = Convert.ToInt32(productDDL.SelectedItem.Text);
Debug.WriteLine(rpt.ID);
if (e.CommandName == "click")
{
Debug.WriteLine("Clicked " + e.CommandArgument.ToString() + "; Quantity: " + Qty);
}
}
在这一行抛出异常:
int Qty = Convert.ToInt32(productDDL.SelectedItem.Text);
我正在尝试准备将数据推送到会话状态,因此我正在测试以确保它可以访问。有没有我遗漏的东西和/或访问该特定值的更好方法?
在 rptProducts_ItemCommand
事件中,您正在使用固定项目索引 0
,您需要 select 触发项目命令的项目
下面的代码行将select当前触发的项目。
DropDownList productDDL = (DropDownList)((RepeaterCommandEventArgs)e).Item.FindControl("DropDownList1");
大家好 — 我正在尝试从 Repeater 中的 DropDown 列表访问 SelectedItem 值,但我收到了抛出的 Null 异常。该转发器将迭代 10 "products" 以上。这是我的 Web 表单中的代码:
<asp:repeater ID="rptProducts" runat="server" OnItemDataBound="rptProducts_ItemDataBound" OnItemCommand="rptProducts_ItemCommand">
<ItemTemplate>
<div class="col-md-8 col-md-offset-2 product">
<img src="<%# Eval("ImageFile") %>" class="col-xs-12" alt="<%# Eval("Name") %> Product Image"/>
<h3><%# Eval("Name") %></h3>
<p><%# Eval("ShortDescription") %></p>
<asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="Add to Cart" CommandName="click" CommandArgument='<%# Eval("Name") %>' UseSubmitBehavior="false" />
</div>
</ItemTemplate>
</asp:repeater>
以及我尝试访问 DropDownList1 的 SelectedItem 值的 .cs 文件中的代码。
protected void rptProducts_ItemCommand(object sender, CommandEventArgs e)
{
Repeater rpt = (Repeater)sender;
DropDownList productDDL = (DropDownList)rpt.Items[0].FindControl("DropDownList1");
int Qty = Convert.ToInt32(productDDL.SelectedItem.Text);
Debug.WriteLine(rpt.ID);
if (e.CommandName == "click")
{
Debug.WriteLine("Clicked " + e.CommandArgument.ToString() + "; Quantity: " + Qty);
}
}
在这一行抛出异常:
int Qty = Convert.ToInt32(productDDL.SelectedItem.Text);
我正在尝试准备将数据推送到会话状态,因此我正在测试以确保它可以访问。有没有我遗漏的东西和/或访问该特定值的更好方法?
在 rptProducts_ItemCommand
事件中,您正在使用固定项目索引 0
,您需要 select 触发项目命令的项目
下面的代码行将select当前触发的项目。
DropDownList productDDL = (DropDownList)((RepeaterCommandEventArgs)e).Item.FindControl("DropDownList1");