[英]Content sensitive title for aspx page
我正在从事一个Sharepoint项目,该项目需要处理许多不同的aspx页面,但是我的ASP.net知识仍然有限。 基本上,Web应用程序的核心基于用户数据。 让我们保持简单,仅假设您可以选择不同的用户数据,aspx页面将基于该数据呈现内容。
现在,跟踪浏览器中的所有标签并不总是那么容易。 作为解决方案,浏览器选项卡应在其标题(除了其他(静态)信息之外)中呈现用户名。 我当前的解决方案是在这篇文章的帮助下以编程方式设置标题。 结果,这就是我到目前为止所拥有的:
已经存在的aspx页从资源文件中检索一些静态字符串以呈现标题的静态部分。
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
<asp:Literal runat="server" text="<%$Resources:UserManager.Resource,GeneralPageTitle%>">
</asp:Literal>
</asp:Content>
现在,我要根据选定的用户内容来调整标题。 我的后台代码在Page_Load函数中做了必要的事情
protected void Page_Load(object sender, EventArgs e)
{
// (...) some stuff happening here
if (Page.Master != null)
{
var web = SPContext.Current.Web;
var contentPlaceHolder = (ContentPlaceHolder)Page.Master.FindControl("PlaceHolderPageTitle");
if (contentPlaceHolder == null) return;
string oldText = String.Empty;
foreach (var control in contentPlaceHolder.Controls)
{
var textControl = control as ITextControl;
if (textControl != null)
{
oldText += textControl.Text;
}
}
contentPlaceHolder.Controls.Clear();
var literalControl = new LiteralControl();
var userName = web.GetCurrentUserName();
literalControl.Text = String.Format("{0} - {1}", oldText, userName);
contentPlaceHolder.Controls.Add(literalControl);
}
}
当然,由于存在许多不同的aspx页,因此由于代码重复,您不会将此代码放入每个Page_Load函数中。 但是对于这个例子,它将解决问题。
基本上,是的,这可行。 但是它有点hacky。 此外,我仍然不喜欢编辑所有aspx的代码隐藏文件的想法(其中有很多)。 我宁愿选择一个更清洁的解决方案。 有什么方法可以不同地实现同一目标吗?
更新
在SazooCat的帮助下,我发现您还可以将代码添加到自定义母版页中( 请参阅参考资料)。 好吧,那也行。 而且我只需要编辑一个文件。 这是好习惯还是NoGo?
您知道您可以(在后面的代码中)做Page.Title = "My custom title string"
对吗?
哦,如果这是某些属性的常用构造,那么如果您制作了一个类
public class MyCustomBasePage Inherits Page
然后在这里放入Page.Title = ???
在OnLoad事件中
然后,您的每个内容页面都可以从MyCustomBasePage继承,例如
Public class MyExamplecontentPage Inherits MyCustomBasePage
注释后跟进...如果您要在母版页级别设置默认标题,并在标题和内容页级别上覆盖,则需要阅读此其他条目: 如何从ASP.NET中的Web内容页面设置页面的标题3.5
这是我现在要走的路线,因为它最适合我的需求。
首先,我创建了一个自定义用户控件
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="BrowserTabInfo.ascx.cs" Inherits="Controls.BrowserTabInfo" %>
<asp:Literal runat="server" ID="userName"></asp:Literal>
执行一些代码隐藏。
protected void Page_Load(object sender, EventArgs e)
{
var web = SPContext.Current.Web;
if (web == null) return;
var userName = web.GetCurrentUserName();
userName.Text = "- " + userName;
}
然后将用户控件插入母版页。
<title id="onetidTitle"><asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/><browsertabinfo:BrowserTabInfoControl id="browsertabinfo" runat="server"/></title>
即使总有一天会有不同的母版页,您也只需将用户控件再次插入该母版页即可获得相同的功能。 您只需要触摸(基本上)一个文件,而不需要触摸许多内容页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.