UpdatePanel导致整页回发

时间:2009-08-06 20:26:31

标签: asp.net updatepanel

我遇到了UpdatePanel的问题,它总是导致整页回发而不是异步回发。

这是aspx代码

    <%@ Page language="c#" Codebehind="RegistrationsOld.aspx.cs" AutoEventWireup="True" Inherits="Registrations.Register" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Registrations</title>
    </head>
    <body>
        <form id="_mainForm" runat="server">
            <asp:ScriptManager ID="_scriptManager" runat="server"></asp:ScriptManager>
            <asp:UpdatePanel ID="_updatePanel" runat="server">
                <ContentTemplate>
                    <asp:Button ID="_postBack" runat="server" Text="Postback!!!" />
                    <%=DateTime.Now%>
                </ContentTemplate>
            </asp:UpdatePanel>
        </form>
    </body>
</html>

逻辑背后没有代码

在生成的HTML中,我注意到缺少注册UpdatePanels的所有javascript逻辑,可能出现什么问题?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Registrations</title>
    </head>
    <body>
        <form name="_mainForm" method="post" action="RegistrationsOld.aspx" id="_mainForm">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="FKfjiCZfvms4LEL11blfrXnmC/wScY2XjDvMtkIBXPqdutqXjc+flWgtcQ5WHHxU" />


<script src="/Registrations/ScriptResource.axd?d=ZqE69ckaWSPtXLlB_ypEoaexcnFR_4HaKEIAj2L1SjguUUzm1b2ynhnRSUdcjmkKP0wNTeyoNrwIk6T5YgXcACfck9AjnPvFflFbAgvZJgM1&amp;t=633306437776352439" type="text/javascript"></script>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="YJ2A6HeD5ZInaAtsQI6zV2+cnGmR39d5mvZmEVdtWCHnBZriZCyd4g==" />

            <div id="_updatePanel">

                    <input type="submit" name="_postBack" value="Postback!!!" id="_postBack" />
                    8/6/2009 5:23:40 PM

</div>


<script type="text/javascript">
<!--
Sys.Application.initialize();
// -->
</script>
</form>
    </body>
</html>

这是web.config文件

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
                    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
                    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>
    </configSections>

    <connectionStrings>
        <add name="ConnectionString" connectionString="server=xxx.xxx.xxx.xxx;Trusted_Connection=false;database=Portal;User ID=*****;Password=*****;Enlist=False"
          providerName="Company.Framework.Data.Providers.SqlServerDatabase, Company.Framework.Data" />
        <add name="TestConnectionString" connectionString="Data Source=xxx.xxx.xxx.xxx;Initial Catalog=Portal;User ID=*****;Password=*****"
          providerName="System.Data.SqlClient" />
    </connectionStrings>
    <appSettings>
        <add key="SiteLink" value=""/>
        <add key="EnableMail" value="false"/>
    </appSettings>
    <system.web>
        <pages validateRequest="true">
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            </controls>
        </pages>
        <authorization>
            <allow users="?"/>
        </authorization>
        <!-- set debugmode to false for running application -->
        <compilation debug="true"/>
        <!--The Portal Starter Kit supports either Forms authentication (Internet)
            or Windows authentication (for intranets).  Forms Authentication is
            the default.  To change to Windows authentication, comment the 
            <authentication mode="Forms"> section below, and uncomment the 
            <authentication mode="Windows"> section. -->
        <!--<sessionState timeout="60" cookieless="false" />-->
        <authentication mode="None"/>
        <!--<authentication mode="Windows" />
        <authorization>
            <deny users="?" />
        </authorization>-->
        <httpRuntime useFullyQualifiedRedirectUrl="true"/>
        <globalization fileEncoding="utf-8" requestEncoding="utf-8" uiCulture="en-US" culture="en-US" responseEncoding="utf-8"/>
        <!-- Adapter configuration for mobile controls used in the portal -->
        <mobileControls>
            <device name="PortalHtmlDeviceAdapters" inheritsFrom="HtmlDeviceAdapters">
                <control name="ASPNET.StarterKit.Portal.MobileControls.TabbedPanel, ASPNETPortal" adapter="ASPNET.StarterKit.Portal.MobileControls.HtmlTabbedPanelAdapter,ASPNETPortal"/>
                <control name="ASPNET.StarterKit.Portal.MobileControls.LinkCommand, ASPNETPortal" adapter="ASPNET.StarterKit.Portal.MobileControls.HtmlLinkCommandAdapter,ASPNETPortal"/>
            </device>
            <device name="PortalChtmlDeviceAdapters" inheritsFrom="ChtmlDeviceAdapters">
                <control name="ASPNET.StarterKit.Portal.MobileControls.TabbedPanel, ASPNETPortal" adapter="ASPNET.StarterKit.Portal.MobileControls.ChtmlTabbedPanelAdapter,ASPNETPortal"/>
            </device>
            <device name="PortalWmlDeviceAdapters" inheritsFrom="WmlDeviceAdapters">
                <control name="ASPNET.StarterKit.Portal.MobileControls.TabbedPanel, ASPNETPortal" adapter="ASPNET.StarterKit.Portal.MobileControls.WmlTabbedPanelAdapter,ASPNETPortal"/>
            </device>
        </mobileControls>
        <!-- Mobile device filters used for customizing portal -->
        <deviceFilters>
            <filter name="isJScript" compare="javascript" argument="true"/>
            <filter name="isPocketIE" compare="browser" argument="Pocket IE"/>
            <filter name="isHTML32" compare="preferredRenderingType" argument="html32"/>
        </deviceFilters>
        <trace enabled="true"/>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
            <remove verb="GET" path="FtbWebResource.axd" />
            <remove verb="POST,GET" path="ajaxpro/*.ashx" />
            <!--<add verb="GET" 
                path="FtbWebResource.axd" 
                type="FreeTextBoxControls.AssemblyResourceHandler, FreeTextBox" /> -->
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </httpModules>
        <machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="3DES"/>
        <customErrors mode="Off"/>
        <xhtmlConformance mode="Legacy"/>
    </system.web>
</configuration>

提前致谢

3 个答案:

答案 0 :(得分:4)

我发现问题是问题!!!

所以,心理记录:不允许使用xhtmlComformance:D

可以找到更多信息here

<强>摘录:

  

除非您知道您的网站在XHTML模式下运行时遇到的已知问题(以及您还没有时间修复),我总是建议您从web.config文件中删除该部分(或者您可以明确地将其设置为“Transitional”或“Strict”)。

     

这将使您的HTML输出标准符合要求。除此之外,这将导致服务器控件中的HTML“格式良好” - 意味着打开和关闭标记元素始终匹配。当您使用AJAX技术动态替换页面上某些HTML元素的内容时,这一点尤为重要(否则客户端JavaScript有时会对容器元素产生混淆并导致错误)。它还将确保ASP.NET AJAX与您的站点一起正常工作。

答案 1 :(得分:0)

您可能需要将“EnablePartialRendering = true”添加到脚本管理器

答案 2 :(得分:-2)

我的第一个想法是从所有ID名称中删除下划线。