Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

asp.net - UpdatePanel causes full page postback

I having an issue with UpdatePanel where its always causing a full page postback instead of an async one.

Here's aspx code

    <%@ 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>

No code behind logic

In the resulting HTML I'm noticing that all the javascript logic for registering UpdatePanels is missing, what can be wrong?

<!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>

This is the web.config file

<?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>

Thanks in advance

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I found the problem is the problem!!!

So, mental note: Disallow use of xhtmlComformance :D

More information can be found here.

Excerpt:

Unless you know of known issues that your site has when running in XHTML mode (and which you don't have time yet to fix), I'd always recommend removing the section from your web.config file (or you can explicitly set it to "Transitional" or "Strict").

This will make your HTML output standards compliant. Among other things, this will cause the HTML from your server controls to be "well formed" - meaning open and close tag elements always match. This is particularly important when you are using AJAX techniques to dynamically replace the contents of certain HTML elements on your page (otherwise the client-side JavaScript sometimes gets confused about container elements and can lead to errors). It will also ensure that ASP.NET AJAX works fine with your site.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...