我在我的母版页中使用<base href="http://localhost:80/">
作为基本网址
现在当我在更新面板中的内容页面(位于dropdownlist
)上使用localhost:80/directory1/directory2
控件时,selectedindexchanged
事件无效。
我试图弄清楚,但在firefox
控制台的网络标签中,我发现该请求仅在url
而不是{{1}的基座localhost:80/contenpage.aspx
上查找内容页面并提供错误
无法找到资源。
答案 0 :(得分:2)
相关情况是默认情况下,表单操作设置为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
操作设置为绝对网址,方法是将以下代码集成到母版中页面:
protected void Page_Load(object sender, EventArgs e)
{
Page.Form.Action = Request.Url.OriginalString;
}
这适用于我的小样本,以便页面可以成功执行PostBack。虽然表单被发布回到相同的位置,就像没有base
标签一样,但可能会有一些副作用,因为页面上的其他资源(例如CSS,JavaScript文件等)也可能被引用相对URL,因此可以从其他位置检索。因此,我仍然建议在使用此解决方案之前重新评估base
标记。
答案 1 :(得分:1)
如果你有一些带有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>
答案 2 :(得分:1)
尝试在表单action
中指定绝对网址。