웹 페이지의 헤드 영역에서는 일반적인 컨트롤을 사용할 수 없지만 때로는 페이지마다 다를 수 있는 제목, 키워드, 설명과 같은 매우 중요한 컨트롤을 어떻게 동적으로 설정할 수 있습니까? 콘텐츠?
방법 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(개체 전송자, 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));
}다른 비공개 메서드를 추가하세요.
개인 무효 SetLiteralText(문자열 ID, 문자열 텍스트)
{
리터럴 lt = null;
컨트롤 컨트롤 = this;
하다
{
ctrl = ctrl.부모;
}while(ctrl != null && ctrl.GetType().FullName != "System.Web.UI.HtmlControls.HtmlForm" )
if(ctrl != null)
{
lt = ctrl.FindControl(id)을 리터럴로;
if(lt != null)
lt.텍스트 = 텍스트;
}
}
이러한 방식으로 사용자 컨트롤은 이 기본 클래스에서 상속한 다음 페이지 제목을 설정하려는 경우 base.SetTitle("title")을 호출하기만 하면 되며 작업이 간단히 완료됩니다. 헤드 영역의 다른 태그에 대해서도 제목을 설정하는 것과 원리는 동일합니다.