各ページのタイトルが異なるASPXページのセットがありましたが、タイトルのないページにはデフォルトのタイトルを付けたいと思います。デフォルトのタイトルは構成可能である必要があります。
これがクラシックASP.NET(MVCではない)であり、MasterPage
を使用している場合は、MasterPage
のPage_Load
イベントでデフォルトのタイトルを設定できます。
protected void Page_Load(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(Page.Title))
{
Page.Title = ConfigurationManager.AppSettings["DefaultTitle"]; //title saved in web.config
}
}
あなたはこれを行うことができます:
Aspxヘッダーを次のように設定します
<HEAD>
<TITLE ID=CaptionHere RUNAT="server"></TITLE>
</HEAD>
そして、コードビハインドでこれをページ読み込みイベントの中に置きます:
if(!IsPostBack)
{
myCaption.InnerHtml = "Hope this works!"
}
これがお役に立てば幸いです
同様の問題があり、これらの解決策はどれもうまくいきませんでした。この問題は、ページに対して発生する順序制御イベントに起因します。私の場合、Page_loadイベントに含める必要のあるコードがいくつかありました(これは、Requestオブジェクトを操作する最初のイベントであるためです)。このコードは、タイトルを設定する前に実行する必要もあります。私のサイトの他のページでは、ページCtorに目的のタイトルを設定するだけで済みましたが、このページでは最初に応答オブジェクトに情報を問い合わせる必要があったため、問題が発生しました。これに伴う問題は、Page_loadイベントに到達するまでに、マスターページがすでにページヘッダーセクションを作成しており、サイトの1つのページにのみ必要なジャンクをマスターページに入れたくないということです。この問題を克服するための私の簡単なハックは、ページのコンテンツ部分にJavaScriptをインラインで挿入することでした。
<asp:Content ID=BodyContent ContentPlaceHolderID=MainContent RunAt=Server>
<script type="text/javascript">
document.title='<%=Title%>';
</script>
... the rest of the content page goes here ...
</asp:Content>
これを設定すると、Page_Loadイベントでタイトルを自由に設定でき、このコード行がダウンロードされるとすぐに設定されます。もちろん、私のサイトにはすでにJS要件があるので、それを回避しようとすると、これはうまくいきません。
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = title();
}
private string title()
{
SqlConnection con = new SqlConnection(cs);
string cmdstr = "select * from title where id = 2";
SqlCommand cmd = new SqlCommand(cmdstr, con);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Open();
da.Fill(dt);
con.Close();
if (dt.Rows.Count > 0)
{
string title = dt.Rows[0]["title"].ToString();
}
return title;
}
これは役に立ちます
マスターページのコードビハインドで、[this.Title = "Whatever";]
を設定するか、HTMLでデフォルトのタイトルを指定することもできます。