簡體   English   中英

ASPX頁面的內容敏感標題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM