我正在使用,<base href="http://localhost:80/">
在我的基本 url 母版页中,
现在我正在使用 dropdownlist
控制更新面板中的内容页面(位于 localhost:80/directory1/directory2
),selectedindexchanged
事件无效。
我试图找出答案,但在 firefox
的网络选项卡中console 我发现请求正在寻找 base url
的内容页面只有那个在localhost:80/contenpage.aspx
而不是 localhost:80/directory1/directory2/contenpage.aspx
并给出错误
The resource cannot be found.
最佳答案
相关情况是表单 Action 在ASP.NET中默认设置为相对URL:
<form id="ctl01" action="./webform1" method="post">
<!-- ... -->
</form>
如果您使用 base
标记,您将更改页面用来解释相对 URL 的基本路径。在您的情况下,base
URL 指向显然无法为应用程序页面提供服务的路径。为了解决这个问题,我会重新考虑是否需要 base
标签。如果是,它应该指向一个能够为应用程序页面提供服务的 URL。为了动态地将base
路径设置为应用程序的基本路径,您可以使用以下代码:
protected void Page_Load(object sender, EventArgs e)
{
baseCtrl.Attributes["href"] = new Uri(Request.Url, "/").OriginalString;
}
作为变通方法,如果您需要保持 base
标记不变,我还尝试通过集成将 form
操作设置为绝对 URL将以下代码放入母版页:
protected void Page_Load(object sender, EventArgs e)
{
Page.Form.Action = Request.Url.OriginalString;
}
这在我的小示例中有效,因此页面可以成功执行 PostBack。虽然表单被回发到相同的位置,就好像没有 base
标记一样,但可能会有一些副作用,因为页面上的其他资源(例如 CSS、JavaScript 文件等)也可能使用相对 URL 进行引用,因此可以从另一个位置检索。所以我仍然建议在求助于此解决方案之前重新评估 base
标记。
关于c# - 在母版页中使用 <base> url 时,asp dropdownlist postback 在更新面板中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35051783/