0

我有一个 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&Title=Participant 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&Title=参与者 80 - 127.0.0.1 404 0 0

如您所见,我的帖子 URL 已完全更改。使用 Fiddler 观察请求/响应,我可以在服务器的响应中看到这一点:

|formAction||NewPlannedService.aspx|

这只是正在执行的页面的名称,相对路径和查询字符串已被删除。

我可以通过将以下内容添加到异步回调方法的末尾来解决此问题:

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

4

1 回答 1

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")
        );
    }
于 2008-10-18T00:43:56.067 回答