2013-11-27 7 views
0

У меня возникли проблемы с повторным заполнением выпадающего списка внутри обновленной панели. При загрузке страницы, я загружаю выпадающий список:Repupulate Asp.Net DropDownList в UpdatePanel

  this.dropdownFacility.Items.Clear(); 
      this.dropdownFacility.DataSource = table; 
      this.dropdownFacility.DataTextField = "FacilityName"; 
      this.dropdownFacility.DataValueField = "FacilityID"; 
      this.dropdownFacility.DataBind(); 

переменные «таблица» является DataTable, что я заселить из базы данных SQL. Это работает и показывает все мои значения после загрузки страницы в первый раз. Затем, внутри моей страницы, у меня есть JQuery диалог, который отображает:

 <div id="assignmentDialog" title="Process Assignment"> 
      <div style="margin:10px; font-size:16px; "> 
       <asp:Label runat="server" Text="Select A Facility:*" Font-Bold="true" style="width:140px; display:inline-block; vertical-align:text-top; text-align:right;" /> 
       <asp:DropDownList runat="server" ID="dropdownFacility" /> 
       <asp:LinkButton runat="server" ID="linkNewFacility" Text="New" ForeColor="Blue" OnClientClick="OpenFacilityDialog();" /> 
      </div> 
     </div> 

После нажатия на кнопку ссылки, еще диалоговое окно JQuery позволяет пользователю вводить данные для объекта. Когда они будут сделаны, они могут нажать кнопку, чтобы отправить данные:

<asp:Button runat="server" ID="NewFacility" Text="Submit" OnClick="NewFacility_Clicked" OnClientClick="return CheckFacilityData();" style="display: block; text-align:center; margin: 0 auto;" /> 

Здесь возникает проблема. После нажатия кнопки, я вижу, что запись была вставлена ​​в таблицу. Кроме того, с точками разрыва в моем коде во время загрузки страницы, я вижу, что после того, как я перекрою выпадающее меню, количество элементов увеличилось на 1, показывая, что есть новая запись. Однако на фактической странице эта новая запись не отображается в раскрывающемся списке. Ниже описано, как я определяю свою панель обновления с помощью триггеров:

<asp:UpdatePanel runat="server" ID="assignmentUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="NewFacility" EventName="Click" /> 
    </Triggers> 
... 

Может ли кто-нибудь увидеть, что я делаю неправильно?

+0

Можем ли мы увидеть код для вашего обработчика событий Click NewFacility? – Lopsided

+0

Код в четном обработчике только отправляет запись в базу данных и работает отлично. –

+0

После большего количества тестов я обнаружил, что удаление диалоговых вызовов JQuery для divs устраняет проблему переполнения выпадающего списка. Тем не менее, я все равно хотел бы использовать диалоговую логику. Возможно, это обходное решение? –

ответ

0

Ну, я понял вопрос. Проблема была связана с тем, что я использую JQuery Dialog с ASP.NET UpdatePanel. Логика JQuery фактически создает новый div для диалога и помещает его вне элемента формы. Чтобы исправить это, я в основном сделал 2 вещи. Первым должен был добавить диалог обратно в форму, делая это:

$("#assignmentDialog").dialog(
{ 
    modal: true, 
    hide: "explode", 
    width: 450, 
    autoOpen: false, 
    resizable: false, 
    open: function (event, ui) 
    { 
     $(this).parent().appendTo("form"); 
    }, 
    close: function (event, ui) 
    { 
     // Clear the inputs 
     $("#textboxStartDate").val(""); 
     $("#textboxEndDate").val(""); 
     $("#dropdownFacility").val(""); 
    } 
}); 

Тогда мне пришлось пошевелить обновить панель внутри диалогового окна, делая это:

<div id="assignmentDialog" title="Process Assignment"> 
     <asp:UpdatePanel runat="server" ID="assignmentUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
1

Попробуйте так:

<asp:DropDownList runat="server" ID="dropdownFacility" 
       AppendDataBoundItems="True" AutoPostBack="True" /> 

или:

this.dropdownFacility.Items.Clear(); 
this.dropdownFacility.DataSource = table; 
this.dropdownFacility.DataTextField = "FacilityName"; 
this.dropdownFacility.DataValueField = "FacilityID"; 
this.dropdownFacility.AppendDataBoundItems = true; 
this.dropdownFacility.AutoPostBack = true; 
this.dropdownFacility.DataBind(); 
Смежные вопросы