2009-08-06 104 views
1

我有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我注意到,所有登記的UpdatePanel缺少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> 

在此先感謝

+0

什麼用的ID屬性下劃線的? – 2009-08-06 20:31:44

回答

4

我發現問題是問題!!!

所以,心理注:不允許使用xhtmlComformance的:d

更多信息,可以發現here

摘錄:

除非你知道你的網站在XHTML模式下運行時(和你沒有時間尚未確定)的已知問題,我總是建議取下部分從您的web.config文件(或者您可以明確地將其設置爲「Transitional」或「Strict」)。

這將使您的HTML輸出標準兼容。除此之外,這將導致您的服務器控件的HTML格式良好 - 意味着打開和關閉標籤元素始終匹配。當您使用AJAX技術動態替換頁面上某些HTML元素的內容(否則客戶端JavaScript有時會對容器元素感到困惑並可能導致錯誤)時,這一點尤其重要。它也將確保ASP.NET AJAX在您的網站上正常工作。

+1

我不認爲這是一個問題。我們在所有頁面中使用帶有DHTML一致性的UpdatePanel。那麼你是說刪除一致性自動使更新面板只發送部分頁面回發? – 2009-08-06 20:34:42

+1

XhtmlCompact to Legacy was the problem http://weblogs.asp.net/scottgu/archive/2006/12/10/gotcha-don-t-use-xhtmlconformance-mode-legacy-with-asp-net-ajax .aspx – Paleta 2009-08-07 12:43:21

-2

我的第一個想法是從所有的ID名稱中刪除下劃線。

0

您可能需要添加「的EnablePartialRendering = true」添加到腳本管理

+1

雖然這是默認值,但值得嘗試。 – 2009-08-06 20:36:45

相關問題