【问题标题】:How ASP.NET CommandName and CommandArgument values are stored?ASP.NET CommandName 和 CommandArgument 值是如何存储的?
【发布时间】:2012-05-08 08:11:06
【问题描述】:

有谁知道控件的 CommandName 和 CommandArgument 属性存储在哪里?我对检索它们不感兴趣,只是想了解更多关于 ASP.NET 内部结构和未来页面大小的考虑。 :)

我创建了一个简单的页面,其中包含 3 个按钮,它们的 commandArg 和 CommandName 设置如下:

<asp:Button Text="Click1" runat="server" CommandArgument="1" CommandName="Delete" OnCommand="CommandExec" />
<asp:Button Text="Click2" runat="server" CommandArgument="2" CommandName="Save" OnCommand="CommandExec" />
<asp:Button Text="Click3" runat="server" CommandArgument="3" CommandName="Copy" OnCommand="CommandExec" />

将 CommandArgument 或 CommandName 更改为相当大的值不会影响 ViewState 内容和大小,那么这些值存储在哪里?

感谢

【问题讨论】:

标签: c# asp.net .net viewstate


【解决方案1】:

如果你想了解 ASP.NET 的内部原理,我仍然认为最好的书是Developing ASP.NET Server Controls and Components by Nikhil Kothari and Vandana Datye。它是为 .NET 1.x 编写的,所以有点过时,但仍然很好地涵盖了基本架构。

在您的示例中,ViewState 大小不受影响的原因是在处理标记的 Init 阶段未跟踪 ViewState。标记中设置为固定值的属性值将硬连线到编译 ASP.NET 页面时生成的代码中。

This MSDN article 很好地概述了 ViewState。

如果您将按钮放在数据绑定控件(如重复器或 GridView)中,您将看到 ViewState 增长,并使用数据绑定语法为每行的 CommandArgument 设置不同的值。

【讨论】:

  • 感谢 Joe,我检查了输出标记中的 ViewState 大小。感谢您推荐这本书,但我仍然强调必须将参数保存在 ViewState 以外的其他位置。
  • 我强调的原因是,如果我提交按钮并将参数保存在页面上的标签中,视图状态(现在包含参数)将会增长!这表明视图状态,如果包含参数,则必须相对较大。
  • @Bakhshi,在您的示例中,它们保存在编译页面时生成的代码中,因为它们是标记中定义的固定值。如果它们是动态值,例如在数据绑定期间生成,它们将存储在 ViewState 中。
  • 啊哈!你说的对!标记是来源:D 谢谢你的观点。我将 commandARgument 赋值从标记更改为代码,结果正如你们所说的那样。
  • 您可能还想看看这篇深入解释 viewstate 的文章:weblogs.asp.net/infinitiesloop/archive/2006/08/03/… 请注意,ViewState 不用于 IsItemDirty==false(未更改)的控件。
【解决方案2】:

【讨论】:

    【解决方案3】:

    这些值确实存储在ViewState

    如果你用一个简单的GridView 和一个带有和不带命令参数/名称等的按钮进行测试...那么你可以看到 ViewState 更大。

    但是,这些值永远不会是非常大的对象或任何东西,所以我个人不会担心。

    【讨论】:

    • 谢谢蒂姆,但是比较这两个(我的示例和您提到的网格示例)不支持 ViewState 存储模型。 gridview 非常复杂,并且非常依赖 viewstate 的内部状态。但是在这里您可以将大文本粘贴到 CommandArguemnt 不会改变 ViewState 的大小!
    • 我想说,如果你担心 ViewState 的大小,那么你应该考虑转移到asp.net-MVC。只是因为您不使用 ViewState 并且可以很好地控制所有内容。
    • 是的,你是对的。我最近学习了 MVC,我非常得心应手:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2010-09-28
    • 2016-08-17
    • 2021-10-24
    • 2011-04-27
    • 2019-03-14
    • 1970-01-01
    相关资源
    最近更新 更多