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 下拉列表 在母版页中使用 <base> URL 时,在更新面板中不起作用

相关情况是表单操作默认设置为 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中指定绝对网址。