Выпадающий список (в панели обновлений) вызывает FULL PostBack! - PullRequest
9 голосов
/ 26 января 2010

У меня проблема с моими AJAX и ASP.NET 3.5 :( Проблема действительно странная, так как я использую одно и то же на другой странице, и там она работает нормально, но на этой конкретной странице это не работает.

Вот что у меня есть:

    <asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true" RenderMode="Inline">
                <ContentTemplate>
<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>

На пути до DropDown есть один DIV (html один), а затем несколько asp: Panels. Я не понимаю, почему это вызывает ПОЧТУ ПОЧТУ? *

Есть идеи? Спасибо

Ответы [ 11 ]

18 голосов
/ 03 февраля 2012

У меня была такая же проблема ... хотя она не показывается здесь в скопированном коде, проверьте, чтобы убедиться, что у вас нет элементов управления с ClientIDMode = Static в панели обновления .... их наследуют

как минимум любые элементы управления, которые могут вызвать обратную передачу

5 голосов
/ 01 сентября 2010

У вас есть выпадающий список с AutoPostBack, установленным на true. Вот почему вы отправляете сообщение вместо AsyncPostBack, если вы этого хотели.

Удалить AutoPostBack=true из выпадающего списка и установите триггер Async для вашей UpdatePanel, установленной на выпадающий список, и его eventname="SelectedIndexChanged"

4 голосов
/ 07 марта 2013

У меня такая же проблема ...

ПРОВЕРЬТЕ ВЕБ-КОНФИГ

<xhtmlConformance mode="Legacy"/>

для этой строки .. и просто удалите его !!

работал для меня. Спасибо http://andrew -murphy.co.uk /? P = 152

2 голосов
/ 13 ноября 2013

Если у вас есть компонент asp с Autopostback="true" и ClientIdMode="Static", вы должны использовать триггер.

Как это:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlPrintOffice" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
         <asp:DropDownList ID="ddlPrintOffice" runat="server" ClientIDMode="Static" AutoPostBack="true" ...blah blah
</asp:DropDownList>
    </ContentTemplate>
</asp:UpdatePanel>
2 голосов
/ 26 января 2010

Извините, что у меня нет навыков программирования: | Все это работало все время, но потому, что одна из страниц действий «выглядела» так, как будто она была ПОСТ-БАКДИНГ, когда это не так Какой позор !!!

Прошу прощения за талию!

1 голос
/ 31 июля 2012

Установка атрибута AutoPostBack в значение true должно быть достаточным, чтобы вызвать частичную обратную передачу, но это не то, что происходит, и полная обратная передача запускается вместо этого, как вы правильно описали.

У меня работает следующий обходной путь:

  1. Удалите атрибут AutoPostBack.
  2. Запуск обратной передачи с помощью события на стороне клиента onchange.

Вот так должен выглядеть оригинальный DropDownList:

<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" OnChange="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(this.name, '', true, '', '', false, true))" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList>

Подробнее о параметрах WebForm_PostBackOptions см. Ниже:

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)

http://msdn.microsoft.com/en-us/library/system.web.ui.postbackoptions_members(v=VS.90).aspx

1 голос
/ 26 января 2010

Как вы связываете свой DropDown? Код, который вы предоставили, работает на моей стороне со статическими элементами. Возможно, что-то в других элементах управления вызывает проблему.

Я заметил, что у вашего UpdatePanel свойство UpdateMode установлено условным, однако вы не определили никаких триггеров. Вы можете попытаться явно указать, что панель обновления должна выполнять асинхронную обратную передачу, когда выпадающий список вызывает событие selectedIndexChanged. Вы можете использовать что-то вроде следующей разметки:

<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true"
    RenderMode="Inline">
    <ContentTemplate>
        <asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" 
            AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged">
        </asp:DropDownList>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlNewService_PortTelco" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>
0 голосов
/ 29 апреля 2016

Установите значение AutoID для свойства ClientIDMode. Это сработало для меня. У меня было разное поведение в разных браузерах (например, Google Chrome и Firefox).

0 голосов
/ 25 апреля 2014

Один из вариантов решения этой проблемы:

Объявить библиотеку

using AjaxControlToolkit;

Тогда вы можете что-то сделать в этих строках

private void InitControl()
{        
            //FIX - DROP DOWN
            ToolkitScriptManager scrManager = (ToolkitScriptManager)Page.Master.Controls[0].Controls[0].FindControl("manScript");
            scrManager.RegisterAsyncPostBackControl(ddlNewService_PortTelco);
}
0 голосов
/ 15 сентября 2013

У меня была эта проблема. Мой Dropdownlist был внутри HTML-таблицы, и моя панель обновлений была обернута вокруг двух отдельных строк. Я исправил проблему, обернув панель обновления вокруг всей таблицы, а не только в две строки.

...