我有一个Web表单,我试图在使用.NET AJAX 1.0扩展时实现动态下拉列表。我已成功实现了所需的位,但有一个有趣的怪癖。
当我从第一个下拉列表中选择一个值时,我的回调就会发生,我的页面也会正确更新。我选择的下一个值,我收到以下错误:
Sys.WebForms.PageRequestManagerServerErrorException: 发生未知错误 在服务器上处理请求。 返回的状态代码是:404
不管我先使用什么控件,第一个请求都有效,第二个请求不然。查看我的IIS日志,我看到以下几行:
2008-10-17 14:52:14 W3SVC1 127.0.0.1 POST /Aware/Xtend/mParticipant/NewPlannedService.aspx WIN = Participant_1224255079212&安培;名称=参与者 80 - 127.0.0.1 200 0 0
2008-10-17 14:52:20 W3SVC1 127.0.0.1 POST /Aware/mParticipant/NewPlannedService.aspx WIN = Participant_1224255079212&安培;名称=参与者 80 - 127.0.0.1 404 0 0
正如您所看到的,我的帖子网址已完全更改。使用Fiddler观察请求/响应,我可以在服务器的响应中看到这一点:
| formAction || NewPlannedService.aspx |
这只是正在执行的页面的名称,相对路径和查询字符串已被删除。
我可以通过在Async回调方法的末尾添加以下内容来解决此问题:
this.Form1.Action = Request.Url.PathAndQuery
但这似乎令人难以置信的跛脚,闻起来有点像发霉的奶酪给我。任何人都可以指出我正确的方向吗?
更新:经过进一步检查,我发现NewPlannedService.aspx不是原始执行页面。 Page1.aspx正在执行,然后调用Server.Transfer(“/ folder / NewPlannedService.aspx”)。因此,浏览器中的URI为http://whatever.com/Page1.aspx,但正在执行的实际页面为http://whatever.com/folder/NewPlannedService.aspx
答案 0 :(得分:1)
为了解决这个问题,我使用以下代码创建了一个名为Ajax.Server.Transfer.Fixer.js的javascript文件:
var orginalFormAction = null;
//capture the current form action value
function BeginRequestHandler() {
orginalFormAction = theForm.action;
}
//set the form action value back to the
//correct value
function EndRequestHandler() {
theForm.action = orginalFormAction;
theForm._initialAction = orginalFormAction;
}
function RegisterRequestHandlers() {
if (typeof (Sys) != "undefined") {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.Application.notifyScriptLoaded();
}
}
//register request handlers after the application
//has successfully loaded.
Sys.Application.add_load(RegisterRequestHandlers);
然后将以下行添加到我的Page_Load事件:
protected void Page_Load(object sender, EventArgs e)
{
PageScriptManager.Scripts.Add(
new ScriptReference("~/Script/Ajax.Server.Transfer.Fixer.js")
);
}