Asp.NET在listview的[item]中更新下拉列表,而不重新加载整个列表视图

时间:2016-09-09 17:44:53

标签: c# asp.net listview asp.net-ajax

我有一个listView,每个项[row]中有两个下拉列表[ddls],当我从第一个下拉列表中选择一个选项时,第二个ddl会重新加载不同的内容。

我目前将整个列表视图包含在updatePanel中。我尝试将updatePanel放到那两个<td> [column]中,但似乎没有这样编译,我怎么能用JS和JQuery实现呢?

1 个答案:

答案 0 :(得分:1)

对第二个DropDownList使用UpdatePanel并将第一个DropDownList设置为触发器似乎工作并且不刷新整个页面:

<asp:GridView ID="GridView1" runat="server" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl1_SelectedIndexChanged" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:UpdatePanel runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:DropDownList ID="ddl2" runat="server" />
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" />
                    </Triggers>
                </asp:UpdatePanel>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

第一个列表的事件处理程序如下所示:

protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl1 = sender as DropDownList;
    DropDownList ddl2 = ddl1.NamingContainer.FindControl("ddl2") as DropDownList;

    // Modify the second DropDownList
    ...
}


更新

如果您更喜欢使用ListView而不是GridView,则可以使用此标记获得等效结果:

<asp:ListView ID="ListView1" runat="server" >
    <LayoutTemplate>
        <table>
            <asp:PlaceHolder ID="itemPlaceholder" runat="server" />
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl1_SelectedIndexChanged" />
            </td>
            <td>
                <asp:UpdatePanel runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:DropDownList ID="ddl2" runat="server" />
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" />
                    </Triggers>
                </asp:UpdatePanel>
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>