2010-03-31 5 views
2

나는이 사실을 알게되어서 놀랐다. 어쨌든. 의 내가 이렇게 내 웹 사용자 컨트롤을 사용한다고 가정 해 봅시다 :ASP.NET 웹 사용자 정의 컨트롤의 내부 값에 액세스

<myprefix:mytag userid="4" runat="server">Some fancy text</myprefix:mytag> 
나는 그것의 코드 숨김 ("일부 공상 텍스트")에서 태그 안의 텍스트에 접근 할 수있을 것이다 어떻게

? 이것을 통해 노출 될 것으로 기대 했었습니다. 텍스트,이. 값 또는 이와 유사한 것.

편집 : 콘텐츠는 요소 'mytag'의 여는 태그와 닫는 태그 사이에 허용되지 않은 : 나는 사용자가 그것을 시도 할 경우 나는 심지어 페이지에 다음과 같은 경고를 얻을.

EDIT2가 :

public partial class mytag: UserControl 
{ 
    public int ItemID { get; set; } 
    protected void Page_Load(object sender, EventArgs e) 
    {   
    } 
} 

답변

9

나는 사용자 지정 컨트롤 유형 문자열의 Text라는 속성이 있습니다 가정합니다. 그런 다음이 속성이 지속 모드 "InnerDefaultProperty"를 갖도록 선언하면 찾고있는 것을 가져와야합니다.

예.

/// <summary> 
/// Default Text property ("inner text" in HTML/Markup) 
/// </summary> 
[PersistenceMode(PersistenceMode.InnerDefaultProperty)] 
public string PropertyTest 
{ 
    get 
    { 
     object o = this.ViewState["Text"]; 
     if (o != null) 
     { 
      return (string)o; 
     } 
     return string.Empty; 
    } 
    set 
    { 
     this.ViewState["Text"] = value; 
    } 
} 

편집 : 당신이 당신의 클래스 정의에 [ParseChildren(true, "PropertyTest")]을 추가하여 파서를 도와 줘야 (MSDN 참조) "허용되지 리터럴 내용"을 방지하기 위해.

물론 쓰기 가능한 속성이 필요합니다 (예 : 내가 전에 부족했던 설정자를 필요로 함).

+0

이 파인더를 사용하면 다음 파서 ** 오류가 발생합니다. 'ASP.mytag_ascx'에는 리터럴 콘텐츠 ('멋진 텍스트')를 사용할 수 없습니다. – Fabian

+0

죄송합니다. 놓친 것. 편집을 참조하십시오 ... – scherand

+0

[ParseChildren (true, "PropertyTest")] 트릭을 했어, 고마워! – Fabian

0

클래스 ([ParseChildren (true, "TestInnerText")]) 앞에 한 줄을 추가하고 "TestInnerText"라는 속성을 추가하십시오. 원하는 컨트롤을 만들면 내부 HTML보기를 표시하기 위해 LiteralControl을 만들었습니다.

"TestInnerText"- 내가 준 임시 이름 일 뿐이며 원하는 속성 이름을 사용할 수 있습니다.

[ParseChildren(true, "TestInnerText")] 
public partial class mytag : UserControl 
{ 
    public string TestInnerText 
    { 
     set 
     { 
      LiteralControl lc=new LiteralControl(); 
      lc.Text=value; 
      this.Controls.Add(lc); 
     } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 
관련 문제