Member 7909353 Ответов: 2

Gridview в ретрансляторе отображается, когда я запускаю postback


У меня есть dropdownlist (ddl) и repeater(rptPayment).

на
 protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {
BindRepeater();
}

Успешно свяжите ретранслятор.

В ретрансляторе, когда я скрываю и показываю gridview on, флажок установлен.
Это работает.

 function hideshowGV(itemId, itemIndex) {
            if (document.getElementById("ContentPlaceHolder1_rptPayment_chkComm_" + itemIndex).checked == true) {
                document.getElementById(itemId + "_gvPayment_" + itemIndex).style.display = 'block';
}
else {
                document.getElementById(itemId + "_gvPayment_" + itemIndex).style.display = 'none';
}
}


Но когда я запускаю другой postback, он (gridview) снова отображается, даже флажок не установлен.

как на
ddlPaymentMode_SelectedIndexChanged


Что я уже пробовал:

<table align="center" style="width: 100%">
        <tr>
<td>         
                                    <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"

                                        Width="200px">
                                    </asp:DropDownList>
                                </td>
</tr>
<tr>
 <td colspan="6" class="tdcontrol">
                <asp:UpdatePanel ID="UpdatePanel6" runat="server">
                    <ContentTemplate>
                        <asp:Panel ID="panelrpt" runat="server" ScrollBars="Auto" Width="100%">
                           
                            <asp:Repeater ID="rptPayment" runat="server" OnItemDataBound="rptPayment_ItemDataBound">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chkComm" runat="server" Checked="true" Text='<%#Eval("CommodityName")%>'

                                        ForeColor="White" Font-Bold="true" />
                                   
                                    <asp:GridView ID="gvPayment" runat="server" AutoGenerateColumns="false" ShowFooter="true"

                                        OnRowDataBound="gvPayment_RowDataBound">
                                        <Columns>
                                            <asp:TemplateField HeaderText="employee" Visible="false">
                                                <ItemTemplate>
                       <asp:Literal  runat="server" Text='<%#Eval("employeeId")%>'></asp:Literal>
                                                </ItemTemplate>
                                            </asp:TemplateField>
                                          
                                             
                                           
                                        </Columns>
                                    </asp:GridView>
                                </ItemTemplate>
                            </asp:Repeater>
                        </asp:Panel>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="ddl" EventName="SelectedIndexChanged" />
                    </Triggers>
                </asp:UpdatePanel>
            </td>
  </tr>
<tr>
<td> <asp:UpdatePanel ID="UpdatePanel24" runat="server">
                                <ContentTemplate>
                                    <asp:DropDownList ID="ddlPaymentMode" AutoPostBack="true" runat="server" Width="200px"

                                        OnSelectedIndexChanged="ddlPaymentMode_SelectedIndexChanged">
                                    </asp:DropDownList>
                                </ContentTemplate>
                            </asp:UpdatePanel></td>
</tr>
</table>

F-ES Sitecore

Инфраструктура .net не знает, что вы показывали или скрывали элементы с помощью javascript, поэтому, когда страница выполняет обратную передачу, она отображает ее так, как она думает, что она должна отображаться. Если вы хотите сделать это, у вас может быть скрытая переменная на странице, и когда вы скрываете элемент, вы также можете обновить скрытую переменную до чего-то, что указывает, что было скрыто. При обратной передаче ваш .net-код может посмотреть на скрытую переменную и узнать, что нужно показать или скрыть на стороне сервера. Также имейте в виду, что если вы укажете что-то как Visible = false в коде сервера, оно никогда не будет отправлено клиенту, поэтому вы не можете показать его через js, вам необходимо изменить сетку, чтобы иметь соответствующий стиль "отображения". of block или none вместо этого.

Graeme_Grant

какой javascript?

F-ES Sitecore

hideshowGV

Graeme_Grant

истинный

2 Ответов

Рейтинг:
7

Member 7909353

<asp:UpdatePanel ID="UpdatePanel6" runat="server" UpdateMode="Conditional">


protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {
UpdatePanel6.Update();
BindRepeater();
}


Рейтинг:
2

Graeme_Grant

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
не звать
function hideshowGV(itemId, itemIndex)


Если вы установите точки останова в коде, вы увидите, что происходит. Базовая отладка с помощью Visual Studio 2010-YouTube[^]