【发布时间】:2020-04-06 08:42:09
【问题描述】:
我有几个单选按钮列表和复选框列表,当前在更新面板中设置为AutoPostback=true。 updatepanel 的异步回发适用于复选框列表,但不适用于单选按钮列表。
这是我的代码:
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="topBar$odsMainProduct" OnItemDataBound="Repeater1_ItemDataBound">
<ItemTemplate>
<div id="<%# Eval("main_product_id") %>" class="menu"></div>
<br></br>
<br></br>
<br></br>
<div class="divMainProduct">
<h2 style="font-weight: bold; font-stretch: ultra-expanded; margin-bottom: -4px"><%# Eval("name") %></h2>
<div style="margin-bottom: 10px">
<asp:Label ID="lblMainProductDescription" Font-Size="10px" EnableViewState="false" runat="server" Text='<%# Eval("description") %>'></asp:Label>
</div>
</div>
<div class="accordion" id="acc">
<asp:Repeater ID="Repeater2" runat="server" DataSourceID="odsMainProduct0" OnItemDataBound="Repeater2_ItemDataBound">
<ItemTemplate>
<div class="card">
<div class="card-header" id="h<%# Eval("product_id") %>" aria-expanded="false" data-toggle="collapse" data-target="#c<%# Eval("product_id") %>">
<asp:HiddenField ID="hfProductId" runat="server" Value='<%# Eval("product_id") %>' />
<asp:HiddenField ID="hfMainProductId" runat="server" Value='<%# Eval("main_product_id") %>' />
<table style="width: 100%;">
<tr>
<td style="width: 70%">
<asp:Label runat="server" Text='<%# Eval("name") %>' CssClass="linkbutton"></asp:Label>
<br />
<asp:Label runat="server" Text='<%# Eval("description") %>' Font-Size="8px" CssClass="linkbutton"></asp:Label>
</td>
<td style="width: 30%">
<asp:Button ID="btnHeaderSave" runat="server" ForeColor="White" Font-Bold="true" OnClick="btnHeaderSave_Click" BackColor="DarkRed" Font-Size="15px" Width="100px" Height="30px" Text="Button" />
</td>
</tr>
</table>
</div>
<div id="c<%# Eval("product_id") %>" class="collapse" aria-labelledby="h<%# Eval("product_id") %>" data-parent="#acc">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="card-body">
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze grootte" Visible="false" ID="pnlSizes">
<asp:RadioButtonList ID="rdblSize" AutoPostBack="true" CssClass="checklist" OnSelectedIndexChanged="rdblSize_SelectedIndexChanged" runat="server"></asp:RadioButtonList>
</asp:Panel>
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze bijgerecht" Visible="false" ID="pnlExtraOption">
<asp:RadioButtonList ID="rdblExtraOption" CssClass="checklist" runat="server"></asp:RadioButtonList>
</asp:Panel>
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze garnering" Visible="false" ID="pnlGarnish">
<asp:CheckBoxList ID="chkGarnish" AutoPostBack="true" CssClass="checklist" OnSelectedIndexChanged="chkGarnish_SelectedIndexChanged" runat="server" RepeatColumns="4"></asp:CheckBoxList>
</asp:Panel>
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze saus" Visible="false" ID="pnlSauce">
<asp:RadioButtonList ID="rdblSauce" AutoPostBack="true" CssClass="checklist" runat="server"></asp:RadioButtonList>
</asp:Panel>
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze extra saus" Visible="false" ID="pnlExtraSauce">
<asp:RadioButtonList ID="rdblExtraSauce" AutoPostBack="true" CssClass="checklist" runat="server"></asp:RadioButtonList>
</asp:Panel>
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze drank" Visible="false" ID="pnlDrink">
<asp:CheckBoxList ID="chklExtraDrink" AutoPostBack="true" CssClass="checklist" runat="server"></asp:CheckBoxList>
</asp:Panel>
<asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze extra's" Visible="false" ID="pnlExtras">
<asp:CheckBoxList ID="chkExtras" CssClass="checklist" runat="server"></asp:CheckBoxList>
</asp:Panel>
<div style="margin-top: 10px; margin-bottom: 5px; text-align: center">
<asp:Button ID="btnSave" runat="server" ForeColor="White" Font-Bold="true" OnClick="btnSave_Click" BackColor="DarkRed" Font-Size="15px" Width="80%" Height="30px" Text="Button" />
<%--<input type="button" id="btnSave2" onclick="getid();" style="color: white; font-weight: bold; background-color: DarkRed; font-size: 15px; width: 100px; height: 30px" value="Button" />--%>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
<asp:ObjectDataSource ID="odsMainProduct0" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProductsByMainProductId" TypeName="ProductBLL">
<SelectParameters>
<asp:Parameter Name="mainProductId" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
</ItemTemplate>
</asp:Repeater>
这是UpdatePanel 的限制还是我在这里做错了什么?
这是radiobuttonlist rdblSize的服务器端代码:
protected void rdblSize_SelectedIndexChanged(object sender, EventArgs e)
{
RepeaterItem row = ((RepeaterItem)((RadioButtonList)sender).NamingContainer);
Button btnSave = (Button)row.FindControl("btnSave");
btnSave.Text = "€" + getPrice(row);
}
protected Decimal getPrice(RepeaterItem ai)
{
HiddenField hfProductId = (HiddenField)ai.FindControl("hfProductId");
RadioButtonList rdbl = (RadioButtonList)ai.FindControl("rdblSize");
Decimal price = 0;
foreach (Product product in productList)
{
if (product.productId == Convert.ToInt32(hfProductId.Value))
{
if (rdbl != null && rdbl.SelectedValue != "")
{
if (product.priceId == Convert.ToInt32(rdbl.SelectedValue))
{
price = product.value;
}
}
else
{
if (product.priceId == Global.nvtPriceId)
{
price = product.value;
}
}
}
}
return price;
}
【问题讨论】:
-
什么不起作用?更改单选按钮列表时页面是否会回发?
-
页面正在回发,但我想要异步回发而不是完整的回发导致页面刷新。
-
你能分享你的服务器端代码吗?
-
我添加到服务器端代码 + 嵌套中继器。我的更新面板在嵌套中继器内
标签: asp.net ajaxcontroltoolkit