対処する必要のあるさまざまな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