post-back asp.net 网络表单中禁用的文本框的行为

Behavior of a disabled TextBox on post-back in asp.net webforms

我正在阅读禁用与只读之间的区别,我了解到使用禁用字段时数据不会在 post 返回时发回。 但是我有一个带有如下文本框的网络表单页面:

<asp:TextBox runat="server" ID="vPlantNameTB" Text="" Enabled="false"></asp:TextBox>

在页面加载时,我将 vPlantNameTB 的值设置为某个值。 (而不是空白)。 因为我禁用了这个 TextBox。我希望 TextBox 的值在 post-back 上为空。但事实并非如此...

我能够在 post-post 返回期间获得我在页面加载时设置的值。
这种行为对于网络表单来说是否正常?

简而言之:

yes, because the value is coming from your viewstate, not the form.

对于稍微复杂一点的答案...

提交的表单数据(可通过 Request.Form 访问)将在 vPlantNameTB 中丢失,因为它已被禁用,因此浏览器不会将其发送到服务器。

发送到服务器的表单数据中还包含一个名为 __VIEWSTATE 的隐藏输入(由 .Net 引擎生成),它的值是表示页面当前状态的 base64 编码字符串.

页面状态自动序列化到呈现的网页并在发布表单时自动反序列化(反序列化过程还处理与页面控件的重新关联,这就是为什么 vPlantNameTB 在你的回发处理程序)。

Scott Mitchell 有一个 decent article about ViewState on MSDN 很好地描述了这个过程。