c# - aspxページのコンテンツ依存のタイトル

原文 c# asp.net sharepoint sharepoint-2010

対処する必要のあるさまざまなaspxページを含むSharePointプロジェクトに取り組んでいますが、ASP.netの知識はまだ限られています。基本的に、Webアプリケーションのコアはユーザーデータに基づいています。単純にして、さまざまなユーザーデータを選択でき、aspx-pagesがそれに基づいてコンテンツをレンダリングすると仮定します。

現在、ブラウザのすべてのタブを追跡することは必ずしも簡単ではありません。解決策として、ブラウザーのタブでは、他の(静的)情報に加えて、タイトルにユーザー名を表示する必要があります。現在の解決策は、this投稿を使用してプログラムでタイトルを設定することです。結果として、これは私がこれまでに持っているものです:

既存のaspx-pagesは、リソースファイルから静的文字列を取得して、タイトルの静的部分をレンダリングします。

<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があるため、コードの重複のため、このコードを各Page_Load関数に配置することはありません。しかし、この例ではそれでうまくいきます。

基本的に、はい、これは機能します。しかし、それは少しハッキーです。さらに、aspxのすべての分離コードファイルを編集するという考えはまだ好きではありません(それらのファイルはたくさんあります)。私はよりクリーンなソリューションを好む。同じ目標を異なる方法で達成する方法はありますか?

更新

SazooCatの助けを借りて、カスタムマスターページ(see this)にコードを追加できることもわかりました。まあ、それもうまくいきます。そして、私は単一のファイルを編集する必要があるだけです。これは良い習慣ですか、それともNoGoですか?
答え
(コードビハインドで)Page.Title = "My custom title string"できることをご存知ですか?

ああ、それがいくつかのプロパティの一般的な構成である場合は、クラスを作成すると

public class MyCustomBasePage Inherits Page


次に、OnLoadイベントのPage.Title = ???ビットを入れます

次に、各コンテンツページはMyCustomBasePageから継承できます。
例えば

Public class MyExamplecontentPage Inherits MyCustomBasePage


コメントからのフォローアップ...マスターページレベルでデフォルトのタイトルを設定し、タイトルとコンテンツページレベルを上書きする場合は、この他のエントリを読む必要があります:How to set Page's Title from a web content page in ASP.NET 3.5
関連記事

c# - QuickTimeムービーに字幕を追加する方法

c# - オブジェクトのリストを単一の応答としてストリーミングし、進捗状況を報告します

c# - クライアントとWeb API間のプロキシとしてMVCコントローラーを使用する

c# - C#キーを押すとオブジェクトの動きが壊れる

c# - ファイルが存在してもWebブラウザーのナビゲーションがキャンセルされました

c# - ユーザーのADからのオブジェクトGUID

c# - サービス時間を垣間見る方法

c# - log4net翌日の開始時にログファイルを上書きする

c# - ASP.NET MVC(部分的なビュー)を使用して同じページにレビュー製品(http投稿)を追加しようとしています

c# - Model3DCollectionとModel3DGroupの違いは何ですか?