Web ページの先頭領域では通常のコントロールは使用できませんが、タイトル、キーワード、説明など、ページごとに異なる場合がある非常に重要なコントロールを、ページごとに動的に設定するにはどうすればよいでしょうか。コンテンツ?
方法 1: asp でできること、もちろん asp.net でもできます。Response.Write() を使用してページ全体を書き込む限り、カスタマイズできないことはありません。もちろん、「<%=a」も可能です。特定のメンバー%" >"。しかし、これでは明らかに .net の特性を活かすことができません。
方法 2: asp.net の一意の属性 runat="server" を使用し、タイトルの ID を設定し、それをサーバー変数にすると、そのテキストを設定できます。しかし、こうして出てくるhtmlにはIDも含まれていて、見ていてとても不快です。
方法 3: リテラル コントロールを使用する、フロント デスク: <HEAD>
<asp:Literal ID="lt_title" Runat="サーバー" />
<asp:Literal ID="lt_keywords" Runat="サーバー" />
<asp:Literal ID="lt_descri" Runat="サーバー" />
</HEAD>バックエンド: private void Page_Load(object sender, System.EventArgs e)
{
lt_title.Text = "<title>タイトル</title>";
lt_keywords.Text = "<メタ名="キーワード" コンテンツ="キーワード">";
lt_descri.Text = "<メタ名="説明" コンテンツ="説明">";
}
これは基本的に完璧です。
さらに、私のページでは多くのユーザー コントロールが使用されており、これらのユーザー コントロールにはレベルがあり、ページのタイトルはユーザー コントロール内のサブユーザー コントロールによって決定される場合があり、ユーザー コントロールのネスト レベルは固定されていません。 では、動的に設定するにはどうすればよいでしょうか?
ホーム ページで、ユーザー コントロールの基本クラスを作成し、それにパブリック メソッドを追加します。
public void SetTitle(string title)
{
SetLiteralText("lt_title", string.Format("<title>{0}</title>", title));
別のプライベート メソッドを追加します。
private void SetLiteralText(文字列 ID, 文字列テキスト)
{
リテラル lt = null;
コントロール ctrl = this;
する
{
ctrl = ctrl.親;
}while(ctrl != null && ctrl.GetType().FullName != "System.Web.UI.HtmlControls.HtmlForm" )
;
{
lt = ctrl.FindControl(id) リテラルとして;
if(lt != null)
lt.Text = テキスト;
}
}
このように、ユーザー コントロールはこの基本クラスを継承し、ページのタイトルを設定するときに Base.SetTitle("title") を呼び出すだけで済み、タスクは簡単に完了します。 head領域のその他のタグについても、タイトルの設定と原理は同じです。