2012-03-16 3 views
3

Web Form의 모든 출력 (aspx 및 aspx.cs, .NET 3.5)을 JSON으로 직렬화하려고합니다. 그래서,이 내 코드입니다 :렌더링 메서드를 재정의 할 때의 문제

protected string myText; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    myText = "<div><span>This is my whole code</span><div><a style=\"color:blue !important;\" href=\"#\">A link</a></div></div>"; 
} 

protected internal override void Render(HtmlTextWriter writer) 
{ 
    var serializer = new JavaScriptSerializer(); 
    Response.Write(Request["callback"] + serializer.Serialize(writer.ToString())); 
} 

하지만이 오류가 얻을 :

CS0507: 'moduli_Prova.Render(System.Web.UI.HtmlTextWriter)': cannot change access modifiers when overriding 'protected' inherited member 'System.Web.UI.Control.Render(System.Web.UI.HtmlTextWriter)' 

내가 잘못을? 이것이 올바른 방법인가?

답변

10

난 당신이 재정

protected override void Render(HtmlTextWriter writer) 

파생 클래스에서 가상 메서드 를 오버라이드 (override) 할 때 우리는 액세스 수식을 수정할 수 없습니다에 internal이 생각하지 않습니다.

재정의 선언은 가상 메서드의 액세스 가능성을 변경할 수 없습니다. 그러나 재정의 된 기본 메서드가 내부적으로 보호 된 이고 재정의 메서드가 포함 된 어셈블리와 다른 어셈블리에서 선언 된 경우 재정의 메서드에서 접근성을 보호해야한다고 선언해야합니다.

참조 here

아마 이런 식으로 뭔가 :

protected override void Render (HtmlTextWriter writer) 
{ 
    StringBuilder sb = new StringBuilder(); 
    HtmlTextWriter tw = new HtmlTextWriter(new System.IO.StringWriter(sb)); 
    //Render the page to the new HtmlTextWriter which actually writes to the stringbuilder 
    base.Render(tw); 

    //Get the rendered content 
    string sContent = sb.ToString(); 

    //Now output it to the page, if you want 
    writer.Write(sContent); 
} 

편집 우리는 .. 우리는 또한 알고있는 모든 페이지가 page에서 상속 알고

그 새로운 htmltextwriter 걸릴에서 콘돔에 stringbuilder이있는 입니다. 그런 다음 기본 클래스 (page)를 호출하여 html을 새로운 HtmlTextWriter으로 렌더링합니다. htmltextwriter을 렌더링하여 stringbuilder으로 렌더링합니다. 이제는 stringbuilder에 html 컨텍스트가 있습니다. 그런 다음 HtmlTextWriter 입력란에 stringbuilder에서 string을 작성해야한다고 말합니다.

참조 here

+0

오른쪽! 하지만 불행히도이 인쇄'요청? "System.Web.UI.HtmlTextWriter", JSON으로 변환 된 웹 양식의 출력 : O – markzzz

+1

@ markzzz, 당신은 객체 자체를 작성하고 있기 때문에 출력하지 않습니다. –

+0

음? 그렇다면 어떻게 출력을 얻을 수 있습니까? 내가 생각하는 그 물건에서? 나는 그 일을하는 어떤 방법도 보지 못합니다 ... – markzzz

관련 문제