加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何决定在viewstate中存储什么?

发布时间:2020-12-16 07:12:03 所属栏目:asp.Net 来源:网络整理
导读:我一直在编写一堆通用的ASP.NET控件,而我似乎无法理解的一件事是什么时候在viewstate中存储值,何时假设它不行. 一方面,在viewstate中存储控件的整个状态是有意义的,包括如下属性: 用户输入的文本框值(或任何表单数据) 配置选项,如高度或页面大小 甚至如何组
我一直在编写一堆通用的ASP.NET控件,而我似乎无法理解的一件事是什么时候在viewstate中存储值,何时假设它不行.

一方面,在viewstate中存储控件的整个状态是有意义的,包括如下属性:

>用户输入的文本框值(或任何表单数据)
>配置选项,如高度或页面大小
>甚至如何组成控件 – 例如存储构建网格视图的所有数据,或网格本身.

忽略性能,你在视图状态中推得越多越好,因为这意味着控件在回发中的行为完全相同,并且从不“意外地”还原值或“忘记”它被禁用.但观点不是免费的.存储一切意味着控件现在将输出HTML及其所有内部属性来创建HTML,这几乎总是使输出翻倍.

我的问题不是关于绩效,而是关于战略.我决定以什么标准将房产置于视域状态?我正在思考这些问题:

If the user can’t change a property,then the server will always set it explicitly,so it’s OK to leave it out of viewstate. Even for something like color=red,the user doesn’t set this property directly; they will click a button elsewhere which indirectly sets this property. That button or its owner should keep the state,not the control that renders the color red.

这个逻辑意味着应该进入viewstate的唯一属性是:

>表单元素如< input> (以及Request.Form [c.UniqueID]这仍然可以避免)
>用户可以直接在控件上以交互方式控制的属性.

这个逻辑有意义吗?它似乎很弱,我想听听专家的更多信息.

解决方法

将ViewState用于控件无法工作的内容.

即使禁用了ViewState,也要将ControlState用于控件工作所需的内容.

首次请求页面时,初始值和控件层次结构(甚至是html控件)将编译到临时ASP.NET文件中.因此,当它们永远不会被更改时,它们不需要存储在任何地方(甚至ViewState也不会保存它们).

控件仅存储ViewState中的属性,这些属性在页面的生命周期中已更改(自TrackViewState以来).状态改变的控件是“脏”的.例如,如果在page_load中更改TextBox1.Text,则ViewState.IsItemDirty("TextBox1.Text")将返回true.这些值将存储在ViewState中.

看here和here.(我真的建议阅读这两篇文章)

Control State vs. View State Example

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读