c# - 在母版页中使用 <base> url 时,asp dropdownlist postback 在更新面板中不起作用

标签 c# asp.net drop-down-menu updatepanel selectedindexchanged

我正在使用,<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/

相关文章:

c# - 如何在 C# 中使用 PInvoke 强制对 dll 函数进行参数计数

c# - 如何处理大图像?

c# - "ASP.NET AJAX Server Control"和 "ASP.NET Server Control"项目类型有什么区别?

javascript - CSS 下拉菜单 - 使用 JavaScript

c# - 何时使用 XmlConvert.ToString 与 Object.ToString()

c# - 计算在 IoT Core 上运行的控制台应用程序的系统 CPU 使用率

asp.net - MVC - 用户必须在 IIS Recycle 上重新进行身份验证

c# - 标签在 ASP.NET 页面的当前上下文中不存在

css - Bootstrap : Position of dropdown menu relative to navbar item

html - CSS 菜单下拉扩展 Div 容器