提问人:Bakhshi 提问时间:5/8/2012 更新时间:5/8/2012 访问量:8728
如何存储 ASP.NET CommandName 和 CommandArgument 值?
How ASP.NET CommandName and CommandArgument values are stored?
问:
有谁知道控件的 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 内容和大小,那么这些值存储在哪里?
谢谢
答:
它保存在视图状态中, 请看这篇文章: http://www.west-wind.com/weblog/posts/2006/Feb/20/ViewState-and-OnItemCommand-on-an-ASPNET-Repeater
这些值确实存储在ViewState
如果您要使用带有和不带有 CommandArguments/Names 等按钮的简单按钮进行测试......然后你可以看到 ViewState 更大。GridView
但是,这些值永远不会是真正的大对象或任何东西,所以我个人不会担心它。
评论
asp.net-MVC
如果你想了解 ASP.NET 内部结构,我仍然认为最好的书是 Nikhil Kothari 和 Vandana Datye 合著的《开发 ASP.NET 服务器控件和组件》。它是为 .NET 1.x 编写的,所以有点过时,但仍然很好地涵盖了基本架构。
在您的示例中,ViewState 大小不受影响的原因是,在处理标记时,在 Init 阶段不会跟踪 ViewState。在标记中设置为固定值的属性值将在编译 ASP.NET 页时生成的代码中进行硬连线。
这篇 MSDN 文章很好地概述了 ViewState。
如果将按钮放在数据绑定控件(如 repeater 或 GridView)中,并使用数据绑定语法为每一行的 CommandArgument 设置不同的值,则会看到 ViewState 增长。
评论
IsItemDirty==false
(未更改)的控件。
评论