我遇到问题,让UpdatePanel在大型现有解决方案中运行。我有一个示例页面(如下所示),它在新创建的演示网站中运行,但在添加到现有的目标网站时却没有。
该功能是隔离下拉列表的自动回发,因此我不会丢失 FileUpload ASP控件的内容(它为security reasons执行此操作,并使用一些解决方案{{ 3}})
在目标(非演示)网站中,控件添加到页面精细(包含intellisense)和页面呈现 - 但更改下拉列表仍然执行回发,而不是ajax - 下拉框。
之前提到的目标解决方案是从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>
示例在演示网站中工作,没有&lt; Triggers&gt;部分,但我已经尝试将其添加到目标网站,但无济于事。
答案 0 :(得分:2)
如果在web.config中设置 not ,则会出现以下情况,并且由于从ASP.NET v1.1升级而发生:
<xhtmlConformance mode="Legacy"/>
所述