使用Literal与GenericHtmlControl和viewstate缩减

时间:2013-08-05 17:35:47

标签: asp.net controls viewstate

我已经在ASP.NET上工作了一年多了,我发现了一个有趣的想法,我想要反馈。

我注意到Literal控件在viewstate中保存了它们的文本值。这对我来说有点奇怪,因为它有效地确保了Literal控件中存储的任何内容都将被复制(一次在渲染页面上,一旦隐藏在视图状态中)。

作为替代方案,我已经开始使用带有runat =“server”和innerhtml / innertext属性的通用html控件。在我看来,如果你需要将你的内容包装在一个标签中,那么在没有viewstate膨胀的情况下实现与文字控制相同的功能。然而,在我尽可能多地消除项目中的文字数量之前,我想知道是否存在任何我没有想到的缺点。想法?

1 个答案:

答案 0 :(得分:0)

我还会考虑创建自己的自定义控件,这很容易做到。你可以这样做:

public class MyLiteral : WebControl
{
    public string Text { get; set; }


    protected override void Render(HtmlTextWriter writer)
    {
        writer.Write(this.Text);
    }

}

由于功能非常简单,因此这是一种灵活的解决方案,因为它可以让您更全面地访问所有文本。例如,稍后如果您意识到需要粗体文本,则不必更新控件的所有标记,您可以更改自定义类。这样做有很多好处。您需要做的就是在配置文件的<pages>元素中添加对命名空间/程序集的引用(tagPrefix为c),并将标记更改为:

<c:MyLiteral Text="xyz" runat="server" />