我刚刚注意到,在我从主页面UpdatePanel
内部执行asyncpostback后,我的页面标题将重置为标准的“无标题页面”。在母版页内回发期间,标题不会丢失(例如,当我点击母版页内的搜索框按钮时)。
我认为通过使用不同的contentplaceholder
专门设置文档标题我会避免这样的问题,但显然我错了。除了必须在ASPX页面的代码隐藏中明确设置标题之外还有其他我想念的东西(我希望避免使用下面设置的方式)吗?
以下是我的页面的基本要点,即调用母版页(下面的母版页代码)
<asp:Content ID="Content1" ContentPlaceHolderID="title" Runat="Server">
Page Title
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="head" Runat="Server">
<script type="text/javascript">
//random javascript validators
</script>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="content" Runat="Server">
<div class="title">
Account Management
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
//Username + Password Set Form
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
这是母版页。 ASP.NET AJAX ScriptManager首先放在正文中的<form>
标记之后。
<head id="Head1" runat="server">
<title>
<asp:ContentPlaceHolder id="title" runat="server">
</asp:ContentPlaceHolder>
</title>
//Stylesheet references
<script type="text/javascript">
//Random javascript functions
</script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
答案 0 :(得分:7)
我们在其中一个网站上遇到了这个问题。
立即修复是在主页面codebehind page_load方法中重置标题。
显然,当发生ajax调用时,它会重新运行母版页。这导致我们的头衔消失了。
例如:
protected void Page_Load(object sender, EventArgs e) {
this.Page.Title = "whatever title you have...";
}
更好的解决方法是删除MS updatepanel垃圾并开始使用JSON / jQuery,你实际上可以控制这些调用。
答案 1 :(得分:5)
您是否反对使用内容页面的标题属性?
<%@ Page Title="Your Page Title" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/...
您也可以在页面加载中以编程方式访问它...
答案 2 :(得分:3)
如果删除标题标记中的空格,可以解决这个奇怪的错误:
<title><asp:ContentPlaceHolder id="title" runat="server"></asp:ContentPlaceHolder></title>
在Sharepoint 2010上测试
答案 3 :(得分:1)
为什么不在JS中修改它,而不是改变你的服务器端代码:
$(function(){
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!(prm)) return;
document.orginalTitle=document.title;
prm.add_endRequest(function(s, e){
if (document.title.replace(/\s/g,"").length==0)
document.title=document.orginalTitle;
});
});
答案 4 :(得分:0)
当您以编程方式设置标题并且仅在不是PostBack时设置标题时会发生这种情况。只需重写保存/加载回发方法,即可将标题保存在viewstate包中。
- (NSDate*)firstDayOfWeek
{
NSCalendar* calender = [[NSCalendar currentCalendar] copy];
[calender setFirstWeekday:2]; //Override locale to make week start on Monday
NSDate* startOfTheWeek;
NSTimeInterval interval;
[calender rangeOfUnit:NSWeekCalendarUnit startDate:&startOfTheWeek interval:&interval forDate:self];
return startOfTheWeek;
}
答案 5 :(得分:-2)
您可以将页面标题放在Viewstate中,然后只需抓住按钮回发Click事件中的字符串并将其分配给Page.Title
public string MyPageTitle
{
get
{
return (string)ViewState["MyPageTitle"];
}
set
{
ViewState["MyPageTitle"] = value;
}
}
在页面加载分配:MyPageTitle =“我的酷网页标题”; 然后在按钮点击事件中:
protected void MyLinkButton_Click(object sender, EventArgs e)
{
Page.Title = MyPageTitle;
}