Перезаполните Asp.Net DropDownList в UpdatePanel

0

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

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

Переменная "table" - это DataTable, которую я заполняю из базы данных SQL. Это работает и показывает все мои значения после загрузки страницы в первый раз. Затем, внутри моей страницы, у меня есть JQuery Dialog, который отображает:

        <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
    Можем ли мы увидеть код для вашего обработчика события нажатия NewFacility?
  • 0
    Код в четном обработчике только передает запись в базу данных, и это работает отлично.
Показать ещё 1 комментарий
Теги:
html-select
updatepanel

2 ответа

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();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню