ASP 下拉列表 在母版页中使用 URL 时,在更新面板中不起作用
本文关键字:更新 URL 不起作用 base 母版页 下拉列表 ASP | 更新日期: 2023-09-27 18:32:16
我正在使用,<base href="http://localhost:80/">
在我的母版页中用于基本网址,
现在,当我在更新面板中的内容页面(位于localhost:80/directory1/directory2
)上使用dropdownlist
控件时,selectedindexchanged
事件不起作用。
我试图弄清楚,但是在控制台的网络选项卡中firefox
我发现请求正在查找基本内容页面url
仅在localhost:80/contenpage.aspx
而不是localhost:80/directory1/directory2/contenpage.aspx
并给出错误
找不到资源。
相关情况是表单操作默认设置为 ASP.NET 中的相对 URL:
<form id="ctl01" action="./webform1" method="post">
<!-- ... -->
</form>
如果使用 base
标记,则会更改网页用于解释相对网址的基本路径。在您的情况下,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;
}
这在我的小示例中有效,以便页面可以成功执行回发。虽然表单被回发到同一位置,就好像没有base
标记一样,但可能会有一些副作用,因为页面上的其他资源(例如.CSS,JavaScript 文件等)也可能使用相对 URL 引用,因此可以从另一个位置检索。因此,我仍然建议在诉诸此解决方案之前重新评估base
标签。
如果你有一些带有Autopostback="true"和ClientIdMode="Static"的asp组件,你必须使用triger!
喜欢这个:
<asp:UpdatePanel ID="upPrinceOffuce" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="myCustomDropdown" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<asp:DropDownList ID="myCustomDropdown" runat="server" ClientIDMode="Static" AutoPostBack="true"
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
尝试在表单action
中指定绝对网址。