在母版页中使用<base> url时,asp下拉列表回发在更新面板中不起作用

Ani*_*ali 7 c# asp.net updatepanel selectedindexchanged drop-down-menu

<base href="http://localhost:80/">在我的主页中使用基本网址,

现在,当我在更新面板中的dropdownlist内容页面(位于localhost:80/directory1/directory2)上使用控件时,selectedindexchanged事件无法正常工作.

我试图搞清楚,但在firefox控制台的网络选项卡中,我发现请求正在寻找url仅在基础上的内容页面localhost:80/contenpage.aspx而不是localhost:80/directory1/directory2/contenpage.aspx并且给出错误

无法找到该资源.

Mar*_*kus 2

相关情况是 ASP.NET 中表单操作默认设置为相对 URL:

<form id="ctl01" action="./webform1" method="post">
    <!-- ... -->
</form>
Run Code Online (Sandbox Code Playgroud)

如果使用该base标记,则会更改页面用于解释相对 URL 的基本路径。在您的情况下,baseURL 指向的路径显然无法为应用程序的页面提供服务。为了解决这个问题,我会重新考虑该base标签是否有必要。如果是,它应该指向能够为应用程序页面提供服务的 URL。为了base动态地将路径设置为应用程序的基本路径,可以使用以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    baseCtrl.Attributes["href"] = new Uri(Request.Url, "/").OriginalString;
}
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,如果您需要保持标记base不变,我还尝试form通过将以下代码集成到母版页中来将操作设置为绝对 URL:

protected void Page_Load(object sender, EventArgs e)
{
    Page.Form.Action = Request.Url.OriginalString;
}
Run Code Online (Sandbox Code Playgroud)

这在我的小样本中起作用,以便页面可以成功执行回发。虽然表单会像没有base标签一样被发回相同的位置,但可能会产生一些副作用,因为页面上的其他资源(例如 CSS、JavaScript 文件等)也可能通过相对 URL 进行引用,因此从另一个位置检索。base因此,我仍然建议在采用此解决方案之前重新评估标签。