5

有谁知道控件的 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 内容和大小,那么这些值存储在哪里?

谢谢

4

3 回答 3

2

它保存在视图状态中,请参阅此帖子:http ://www.west-wind.com/weblog/posts/2006/Feb/20/ViewState-and-OnItemCommand-on-an-ASPNET-Repeater

于 2012-05-08T08:22:55.720 回答
2

这些值确实存储在ViewState

如果您要使用GridView带有和不带有 CommandArguments/Names 等的按钮进行简单测试...然后您可以看到 ViewState 更大。

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

于 2012-05-08T08:25:05.027 回答
2

如果您想了解 ASP.NET 内部原理,我仍然认为最好的书是Nikhil Kothari 和 Vandana Datye 的《开发 ASP.NET 服务器控件和组件》。它是为 .NET 1.x 编写的,所以有点过时,但仍然很好地涵盖了基本架构。

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

这篇 MSDN 文章很好地概述了 ViewState。

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

于 2012-05-08T08:34:46.333 回答