UpdatePanel AsyncTriggers не работает после обновления до 4.0 - PullRequest
0 голосов
/ 08 марта 2011

Недавно я обновил свое решение до 4.0, и, похоже, все прошло гладко, за исключением ASP.NET AJAX.

У меня есть UpdatePanel:

<asp:UpdatePanel ID="pnlAdvSearch" UpdateMode="conditional" runat="server">
  <ContentTemplate>  
      <asp:Button ID="btnHidden" Runat="server" OnClick="btnHidden_Click"
              ClientIDMode="Static"/>
  </ContentTemplate>
  <Triggers>
      <asp:AsyncPostBackTrigger ControlID="btnHidden" EventName="Click"/>
  </Triggers>
</asp:UpdatePanel>

У меня есть текстовое поле с опережением ввода, которое вызывает событие btnHidden_Click при нажатии / вводе и т. Д. Я вызываю следующий метод при нажатии / вводе текстового поля.

  function getSelectionId() {     
      __doPostBack(
          '<%=btnHidden.ClientID%>',
          document.getElementById('<%=txtLocation.ClientID %>').value
      );
      theForm.__EVENTARGUMENT.value = "";
  }

Я вижу, как происходит постбэк и Page_Load выполняется. Однако серверная сторона btnHidden_Click никогда не запускается. Я не хочу отключать проверку события на уровне страницы. Что я здесь не так делаю? (

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Сначала убедитесь, что ваша сборка настроена на .NET 4.0 Framework, а затем посмотрите на файл web.config. У вас может быть несколько ссылок на параметры, необходимые для выполнения операций ASP.NET AJAX в ASP.NET 2.0, которые вы можете удалить.

В частности, отметьте тег <compilation> и тег <httpHandlers> в полях <system.web> и system.webServer.

.

Например, вы можете увидеть что-то вроде следующего при компиляции> сборки:

<compilation>
  <assemblies>
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>
</compilation>

Эти ссылки, скорее всего, могут быть удалены. Кроме того, несколько настроек под <pages>, <httpHandlers> и <httpModules>, вероятно, также могут быть удалены.

<pages>
  <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </controls>
</pages>
<httpHandlers>
  <remove verb="*" path="*.asmx"/>
  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
0 голосов
/ 09 марта 2011

Это то, что я в конечном итоге делал на Page_Load.

            if (Page.Request.Params.Get("__EVENTTARGET") == "btnHidden") //Workaround hack for AsyncPostBackTrigger fail
                this.btnHidden_Click(null, null);

Когда происходит асинхронная обратная передача, я просто запускаю событие явно.Вроде хак, но не стоит тратить на это больше времени:)

...