2013-07-30 3 views
0

FormPage.cs이라는 파일을 상속 한 많은 .aspx 페이지가있는 사이트를 실행한다고 가정합니다. 이 페이지를 만들었을 때 많은 사람들이 System.Web.UI.WebControls.HiddenField처럼 숨겨진 필드를 사용했습니다.컨트롤을 확장하지 않고 컨트롤 속성의 get 및 set 메서드를 수정할 수 있습니까?

public override string Value 
{ 
    get 
    { 
     return HttpUtility.HtmlDecode(base.Value); 
    } 
    set 
    { 
     base.Value = HttpUtility.HtmlEncode(value); 
    } 
} 

이 가능한 경우 FormPage.cs 파일에서 새로운 클래스를 생성하지 않고 HiddenField의 취득 및 설정 방법을 수정하는 것입니다 : 지금, 이러한 숨겨진 필드의 Value 속성은 다음과 같은 것을 필요로 실현되었다 그걸 상속하는 모든 페이지에서 HiddenField의 모든 인스턴스를 바꿀 필요가 없습니까?

답변

0

확장 메서드를 HiddenField 컨트롤에 추가 할 수 있습니다.이 메서드는 상속이 필요하지 않습니다. 그러나 솔루션은 기본적으로 확장 메서드를 참조하도록 코드를 변경해야하기 때문에 제한적입니다.

public static void SetValue(this HiddenField c, string text) 
{ 
    c.Value = HttpUtility.HtmlEncode(text); 
} 

public static string GetValue(this HiddenField c) 
{ 
    return HttpUtility.HtmlDecode(c.Value); 
} 
+0

글쎄, 그것은 대안입니다. 감사. – Micteu

+0

상속을 피하고 싶었던 이유는 같은 이름의 기존 클래스를 확장 한'HiddenField'라는 새로운 클래스를 만들려고했기 때문입니다. 나는 각 페이지 상단의'using' 섹션에 포함 된 다른 .cs 파일에서이 작업을 수행했습니다. 그 때문에 모호함 때문에 오류가 발생했습니다. 그러나,'FormPage.cs'에 재정의 클래스를 정의하면 작동하는 것처럼 보입니다. – Micteu

+0

사실, 이것이 최선의 대안이라고 생각합니다. 코드로'HiddenField' 클래스를 확장하는 새로운 클래스를 만듭니다. 애매 모호한 문제 때문에 기본 클래스의 이름을 지정하지 마십시오. 그런 다음 aspx 페이지에서'HiddenField' 클래스의 모든 인스턴스에 대한 전역 검색을 수행하고 선언을 사용자 정의 클래스의 인스턴스로 바꿉니다. –