Проблемы при переопределении метода Render - PullRequest
3 голосов
/ 16 марта 2012

Я хочу сериализовать все мои выходные данные веб-формы (из 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)'

Где я ошибаюсь?Это правильный способ сделать это?

1 Ответ

10 голосов
/ 16 марта 2012

Не думаю, что у вас internal в переопределении

protected override void Render(HtmlTextWriter writer)

Мы не можем изменять модификаторы доступа при переопределении виртуального метода в производном классе.

anОбъявление переопределения не может изменить доступность виртуального метода.Однако, если переопределенный базовый метод защищен внутри и объявлен в сборке, отличной от сборки, содержащей метод переопределения, тогда объявленная доступность переопределенного метода должна быть защищена.

Ссылка здесь

Может быть что-то вроде этого:

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 принимает stringwriter с stringbuilder в конструкторе.Когда мы затем вызываем базовый класс (page) для рендеринга html в наш новый HtmlTextWriter.Он также отображает htmltextwriter, который также отображает stringbuilder.Так что теперь у нас есть HTML-контекст в нашем stringbuilder.Затем мы просто говорим введенному HtmlTextWriter, то есть следует написать string из нашего stringbuilder.

Ссылка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...