【问题标题】:Use of Literal vs GenericHtmlControl and viewstate reduction使用 Literal 与 GenericHtmlControl 和视图状态减少
【发布时间】:2013-08-05 17:35:46
【问题描述】:

我已经在 ASP.NET 上工作了一年多,我想到了一个有趣的想法,希望得到反馈。

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

作为替代方案,我已经开始使用带有 runat="server" 和 innerhtml/innertext 属性的通用 html 控件。在我看来,这似乎可以在没有视图状态膨胀的情况下实现与文字控制相同的事情,前提是您无论如何都需要将内容包装在标签中。不过,在我尽可能多地消除项目中的 Literals 之前,我想知道是否有任何我没有想到的缺点。想法?

【问题讨论】:

  • 你是否在服务器端使用或修改这些控件的值?

标签: asp.net controls viewstate


【解决方案1】:

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

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


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

}

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

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

【讨论】:

  • 这似乎是一个绝妙的解决方案。它实现起来非常简单,并且没有我的通用控制方法所具有的限制,同时仍然保持视图状态干净。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2012-12-07
  • 2013-03-20
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
相关资源
最近更新 更多