我希望将Web窗体的所有输出(从.NET 3.5上的aspx和aspx.cs)序列化为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)'
我哪里错了?这是正确的方法吗?
答案 0 :(得分:10)
我认为你没有internal
覆盖
protected override void Render(HtmlTextWriter writer)
覆盖虚拟方法时,我们无法修改访问修饰符 在派生类中。
覆盖声明无法更改虚拟的可访问性 方法。但是,如果重写的基本方法是内部保护的 并且它在与程序集不同的程序集中声明 包含override方法然后声明override方法 必须保护可访问性。
参考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
中有一个新的stringwriter
,它在构造函数中有stringbuilder
。然后我们调用基类(page
)将html呈现给我们的新HtmlTextWriter
。它也会呈现htmltextwriter
,也会呈现给stringbuilder
。所以现在我们在stringbuilder
中有html上下文。然后我们只对那个应该从HtmlTextWriter
写出string
的输入stringbuilder
说。
参考here