2016-09-09 2 views
0

У меня есть listView с двумя dropdownlists [ddls] в каждом элементе [строка], когда я выбираю параметр из первого раскрывающегося списка, второй ddl перезагружает другое содержимое.Asp.NET Update dropdownlist в строке [item] в listview без перезагрузки всего списка

В настоящее время у меня есть весь список, обернутый в updatePanel. Я попытался поставить updatePanel для этих двух <td> [столбец], но, похоже, он не компилируется таким образом, как я могу достичь этого с помощью JS и JQuery?

+0

У вас есть вся информация на стороне клиента, чтобы изменить содержание второго DropDownList? Или вам нужно получить данные с сервера после выбора элемента в первом списке? – ConnorsFan

+0

Мне нужно будет получить его с сервера, но при необходимости я могу загрузить его на клиентской стороне (о, вы имеете в виду просто сделать выбор невидимым?) –

ответ

1

Использование UpdatePanel для второго DropDownList и установки первого 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 
    ... 
} 


UPDATE

Если вы предпочитаете использовать в 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> 
+0

Я переключился на GridView, и это сработало, но для точности вопрос, есть ли способ сделать это с помощью ListView? –

+0

Извините, я использовал GridView в своих тестах и ​​забыл, что ваш вопрос был о ListView. Я обновил свой ответ, чтобы предоставить эквивалентный код для ListView. – ConnorsFan

Смежные вопросы