UpdatePanel - ошибок нет, но требуются ли настройки web.config? - PullRequest
1 голос
/ 31 мая 2011

У меня проблемы с работой UpdatePanel в большом существующем решении.У меня есть образец страницы (ниже), который работает на только что созданном демо веб-сайте, но не при добавлении к существующему target веб-сайту.

Функциональность заключается визолировать автоматическую обратную передачу в раскрывающемся списке, чтобы я не потерял содержимое FileUpload элемента управления ASP (он делает это по соображениям безопасности , с некоторыми решениями , описанными здесь )

На целевом сайте (не демо) элемент управления добавляет на страницу штраф (inc intellisense), и страница отображается, но изменение выпадающего меню все еще выполняет обратную передачувместо ajax-ifying выпадающего списка.

Упомянутое решение target было ранее обновлено с ASP.NET v1.1, , поэтому мне интересно, есть ли что-то, что я 'отсутствует в конфигурации?

Единственное отличие, которое я могу найти в визуализированном источнике HTML, состоит в том, что нерабочая версия не добавляет PageRequestManager , например:

<script type="text/javascript"> 
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ctl02', document.getElementById('form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tctl03'], [], [], 90);
//]]>
</script>

Пример страницы:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    <asp:ScriptManager ID="ScriptManager2" runat="server" />
    <div>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server">
            <ContentTemplate>
                <asp:DropDownList runat="server" ID="TestDropDown" AutoPostBack="true" OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
                    <asp:ListItem>One</asp:ListItem>
                    <asp:ListItem>Two</asp:ListItem>
                    <asp:ListItem>Three</asp:ListItem>
                </asp:DropDownList>

                <asp:Literal runat="server" Text="Original state" ID="litText" />
            </ContentTemplate>
        </asp:UpdatePanel>

        <asp:FileUpload ID="FileUpload2" runat="server" />
    </div>

    </form>
</body>
</html>

И в коде:

protected void TestDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        litText.Text = "Ajax update. The file details should still be present below";
    }

Я могу подтвердить, что тег ScriptManager добавляет к источнику страницы следующее, поэтому я предполагаю, что был добавлен Ajax Toolkit:

if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');

И что у нас есть следующие разделы в web.config:

<compilation defaultLanguage="c#" debug="true">
      <assemblies>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

[...]

<pages>
    <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, [...]
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions" [...]

[...]

<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" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>
<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

Пример работает на сайте demo без раздела , но япробовал добавить его на сайт target , но безрезультатно.

1 Ответ

2 голосов
/ 31 мая 2011

Получается, что в файле web.config должно быть установлено , а не , и это происходит в результате обновления с ASP.NET v1.1:

<xhtmlConformance mode="Legacy"/>

Как обсуждено на Сообщение в блоге ScottGu

...