2010-02-09 57 views
2

我使用ASP.NET中的UpdateProgress控件有问题呈现。我成功地使用这个控件成功创建了一个小项目,但是当我在我的解决方案中使用相同的代码创建了一个简单的.aspx页面时,它不起作用。呈现的HTML代码中存在不匹配的地方,它不起作用,它缺少部分,例如WebResource.axd的不是HTML

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTQ0OTI0ODUwMg9kFgICAw9kFgICBQ9kFgJmD2QWAgIDDw8WAh4EVGV4dAVqMTc6Mjc6MzA8YnIgLz4xNzoyNzozMDxiciAvPjE3OjI3OjMwPGJyIC8+MTc6Mjc6MzA8YnIgLz4xNzoyNzozMDxiciAvPjE3OjI3OjMwPGJyIC8+MTc6Mjc6MzA8YnIgLz4xNzoyNzozMGRkZIkvHCekERlfS9y4PA2asxGaEowE" /> 

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['form1']; 
if (!theForm) { 
    theForm = document.form1; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 

<script src="/WebResource.axd?d=xwJ8mgqm3wQN2acMjQykvA2&amp;t=633941258702151333" type="text/javascript"></script> 

Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1')); 
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tUpdatePanel1'], [], [], 90); 

有没有人有这个问题?也许我错过了一个JavaScript参考?

下面是HTML设置页面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="UpdateProgressTest._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head id="Head1" runat="server"> 
    <title>Update Progress</title> 
    </head> 

    <body> 
     <form id="form1" runat="server"> 
     <div> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     Some page content<br/> 

     <asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1"> 
      <ProgressTemplate> Processing… </ProgressTemplate> 
     </asp:UpdateProgress> 

     More page content<br /> 

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> <div style="border-style:solid;background-color:gray;"> 
       <asp:Button ID="Button1" runat="server" Text="Update"/><br/><br/> 
       <asp:Label runat="server" ID="time1"></asp:Label><br/></div><br/> 
      </ContentTemplate> 
     </asp:UpdatePanel><br/> 
     </div> 
     </form> 
    </body> 
</html> 

这里是后面部分的C#代码在同一页:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace UpdateProgressTest 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      System.Threading.Thread.Sleep(4000); 
      // base.OnLoad(e); 

      string theTime = DateTime.Now.ToLongTimeString(); 
      for (int i = 0; i < 3; i++) 
      { 
       theTime += "<br />" + theTime; 
      } 

      time1.Text = theTime; 
     } 
    } 
} 

正如我所说的,这个代码工作正常,在我的测试项目,但是当我用它在我的解决方案(我创建了一个新的页面,只是要确定我的其他控件未经过回调AJAX机制干扰)

谁能帮助不成?

回答

0

我刚刚搞清楚了这一点:d。

的问题是在web.config文件Zhaph本 - 杜吉德建议。这是一个旧的解决方案,所以我已将其从.net 1.1升级,因此在web.config中的节点下有

<xhtmlConformance mode="Legacy"/> 

我改变了对

<xhtmlConformance mode="Transitional"/> 

,事情开始工作:d关于如何在asp.net网站配置XHTML呈现更多信息,可以发现here

1

我总是发现它有利于明确指定的MS AJAX控件的行为。首先将DisplayAfter属性设置为UpdateProgress控件上的一些小(如1)。此外,为UpdatePanel1设置ChildrenAsTriggers为“true”,以确保当您单击Button1时它正在执行AJAX调用。

有时,当我不指定这些东西,在AJAX控件不表现得像我希望他们。

+0

设置DisplayAfter =“1” UpdatePanel的updateprogress控件和ChildrenAsTriggers =“true”。同样的结果,如果我理解正确的话,如果任何服务器控件使用它,webResource引用被添加,但两个页面的代码是相同的,所以这应该不成问题。我也看过web.config进行比较,涉及的部分是相同的:S – armannvg 2010-02-09 18:06:31

1

如果您直接请求WebResource.asxd(使用查询字符串参数)文件,或者如果您正在使用FireBug切换到脚本选项卡,然后查看脚本的内容,您会看到什么?

这有可能是你的新projct没有在web.config中进行正确的设置以正确投放资源 - 比较两个项目的web.config文件,特别是<httpHandlers>部分 - 你应该有这样的:

<add path="WebResource.axd" verb="GET" 
    type="System.Web.Handlers.AssemblyResourceLoader" validate="True" /> 
+1

感谢您的答复,我只是想出了这一点。你说得对,问题出在网络上。配置但与节点中的设置相关 – armannvg 2010-02-10 10:45:01

+0

没问题 - 没有一个我以前遇到过,很好学习它:) – 2010-02-10 11:28:07