Обновление панели для radiobuttonlist - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть пара списков радиокнопок и контрольный список, который в настоящее время установлен на AutoPostback=true внутри панели обновления. Обратная передача asyn c 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;

}

1 Ответ

0 голосов
/ 06 апреля 2020

Похоже, вы не установили "AutoPostBack = true" для списка радиокнопок. Установите это свойство и попробуйте, должно работать.

Работает для меня с кодом ниже

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <div class="card-body">
        <asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze extra saus" Visible="true" ID="pnlExtraSauce">
            <asp:RadioButtonList ID="rd" AutoPostBack="true" CssClass="checklist" runat="server"></asp:RadioButtonList>
        </asp:Panel>

        <asp:Panel runat="server" CssClass="pnl" GroupingText="Keuze extra's" Visible="true" ID="pnlExtras">
            <asp:CheckBoxList ID="chk" CssClass="checklist" AutoPostBack="true" 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" />

        </div>
    </div>
</ContentTemplate>

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rd.Items.Add(new ListItem("One", "1"));
            rd.Items.Add(new ListItem("Two", "2"));
            rd.Items.Add(new ListItem("Three", "3"));

            chk.Items.Add(new ListItem("One", "1"));
            chk.Items.Add(new ListItem("Two", "2"));
            chk.Items.Add(new ListItem("Three", "3"));

        }
    }
...