我在ASP.NET中使用updateprogress控件时遇到问题。我成功地使用此控件创建了一个小项目,但是当我使用相同的代码在我的解决方案中创建一个简单的.aspx页面时,它不起作用。呈现的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&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 :(得分:1)
我总是觉得明确指定MS AJAX控件的行为是有益的。首先将DisplayAfter属性设置为UpdateProgress控件上的小(如1)。另外,将UpdateAsnelTriggers设置为“true”以确保它在单击Button1时进行AJAX调用。
有时当我没有指定这些内容时,AJAX控件的行为与我期望的不同。
答案 1 :(得分:1)
如果您直接请求WebResource.asxd(带有查询字符串参数)文件(或者如果您使用FireBug切换到“脚本”选项卡,然后查看脚本的内容),您会看到什么?
您的新项目可能没有在web.config中正确设置以正确提供此资源 - 比较两个项目web.config文件,尤其是<httpHandlers>
部分 - 您应该具有以下内容:
<add path="WebResource.axd" verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
答案 2 :(得分:0)
我只是搞清楚这一点:D。
问题出在web.config文件中,因为Zhaph-Ben Duguid建议。这是一个旧的解决方案,所以我从.net 1.1升级它,因此它有
<xhtmlConformance mode="Legacy"/>
在web.config中的节点下。
我把它改为
<xhtmlConformance mode="Transitional"/>
并且事情开始起作用了:D可以找到有关如何在asp.net网站中配置Xhtml渲染的更多信息here