禁用viewstate
<asp:Dropdownlist/>禁用viewstate以后
public partial class _Default : System.Web.UI.Page
{
protected override void OnPreInit(EventArgs e)
{
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("4");
list.Add("5");
list.Add("6");
list.Add("7");
list.Add("8");
list.Add("9");
list.Add("0");
drop1.DataSource = list;
drop1.DataBind();
//int count = drop1.Items.Count;
base.OnPreInit(e);
base.OnPreInit(e);
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
//protected override void LoadViewState(object savedState)
//{
// base.LoadViewState(savedState);
//}
//ProcessPostData()
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//List<string> list = new List<string>();
//list.Add("1");
//list.Add("2");
//list.Add("3");
//list.Add("4");
//list.Add("5");
//list.Add("6");
//list.Add("7");
//list.Add("8");
//list.Add("9");
//list.Add("0");
//drop1.DataSource = list;
//drop1.DataBind();
}
else
{
string txt = drop1.SelectedValue;
}
}
protected void drop1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}问题:1。
服务端代码中绑定下拉框的数据源。为什么禁用viewstate以后drop1.SelectedValue的到得值空的?
答:回发得到的回发的时候,void LoadViewState(object savedState)在这里有一个分析viewstate的过程,过程1,把viewstate解析给drop1的
datasoure属性.过程2,然后drop1.selectedValue = request.form["drp1"].这样我们就行通过drop1.selectedValue获取到我们选中的值了
。
可是当我们把viewstate禁用掉以后发现,1过程已经不能把viewstate付给datasource属性了,这样drop1一个值也没有,然后2步骤将我们选中的
值赋给一个空的drop,drop根本找不到与其相应的索引,由于它是空的。这样我们再用drop1.selectedValue的时候它是一个空值。
问题:2
若下拉框的数据源绑定不是在服务端编码实现的,而是在服务端通过在页面的标签里面进行了赋值。列如:
<asp:DropDownList runat="server" ID="drop1" AutoPostBack="true" EnableViewState="false"
OnSelectedIndexChanged="drop1_SelectedIndexChanged">
<asp:ListItem Text="春" Value="1">
</asp:ListItem>
<asp:ListItem Text="夏" Value="2">
</asp:ListItem>
</asp:DropDownList>
这个时候我们禁用viewstate的时候发现drop1.SelectedValue可以获取到client选中的值.这个时候又是为什么?
答:在在服务端通过在页面的标签里面进行赋值,事实上在请求到达void OnPreInit(EventArgs e)这种方法的时候,asp.net有一个
生成控件树的过程,然后对.aspx页面中的每一个控件都进行了初始化。也就是说drp1的datasource属性这个时候已经有值了,
假设不相信,我们能够初次请求的时候,在void OnPreInit(EventArgs e)这个最早的阶段看下drop1的数量.代码例如以下;
protected override void OnPreInit(EventArgs e)
{
int count = drop1.Items.Count;//显示2
base.OnPreInit(e);
}
回发的时候,我们依照问题1中的解说的void LoadViewState(object savedState)对SelectedValue赋值的事情,这个时候
datasource属性不是空的,当然就能够把client的返回值,赋给selectedValue了。
(另外一个大家须要知道的是,
1.服务端的.aspx页面进行初始化,viewtate是不会被记录的,所以我们查看client的viewtate事实上也是没有drop中所包括的信息的.
2.假设我们对下拉框的赋值是通过client进行的,也就是Js.那我们在回发的时候发现SelectedValue的值也是空的,事实上我们也能够通过问题1
能够来解释。client赋值这里就不涉及到一个装载和解析viewstate的问题。
3.在问题一中过程2.drop1.selectedValue = request.form["drp1"]。说明client选中的值是不通过viewstate传递的,而是通过表单
Request.Form["drop1"].ToString()能够获取的到的。凡是继承了IPostBackDataHandler都是通过表单获取client提交的值的。所以无论是否
禁用viewstate都能获取到client提交的值.)
禁用viewstate的更多相关文章
- 15.禁用ViewState
默认情况下ASP.net是启用ViewState的,这样在页面中会生成冗长的隐藏字段,ViewState对于需要PostBack处理的页面才可能有用,对于不需要交互的页面则完全没有必要用ViewSta ...
- web.congfig 禁用 ViewState Session
<!--禁用 ViewState Session--> <pages enableViewState="false" enableSessionState=&qu ...
- ASP.NET - 禁用ViewState
默认情况下,ViewState是被启用的,比如提交表单后,表单中输入的值会自动保留.但是如果不需要保留,也可以将其禁用,这样可以节省资源. 下面3种方式就可以分别禁用某一个控件.某一个页面和整个应 ...
- 什么是viewstate,能否禁用?是否所用控件都可以禁用
viewstate用于在两次postback之间保持状态的一种机制禁用viewstate将不能在回发之间保存状态 当控件状态无关使用viewstate将造成性能问题时需要禁用viewstate Vie ...
- Webform Application传值 ViewState
Application:所有的会话共享一个Application空间,任何一个人改变Application的内容,其他人都会发现被改变了.Application中的内容不会被自动释放 存放位置:服务端 ...
- ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...
- Webform Application、ViewState
Application(全局对象) Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApplication类对象Application被自动 ...
- 让VIEWSTATE从页面中完全消失(小技巧)
VIEWSTATE是个好东西,是asp.net的一大创举,给web开发带来了极大的便利,然后这种便利是一种双刃剑,尤其是在前台页面,大多数前台页面都是用来展示列表数据,和用户交互的地方现在大都采用 ...
- 教你50招提升ASP.NET性能(二十):7条便利的ViewState技巧
(32)Seven handy ViewState tips 招数32: 7条便利的ViewState技巧 Every time I have to deal with a classic ASP.N ...
随机推荐
- QT5.6所开放的7个新模块(图表,虚拟键盘,性能分析,静态分析,测试正好,2D渲染)
The modules newly available to open source users are: Qt Charts Qt Data Visualization Qt Virtual Key ...
- docker 学习笔记21:docker连接网络的设置
1.如果docker主机不需要通过代理连接外网 则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置. 2.当docker主机 是通 ...
- td
http://jameswxx.iteye.com/blog/1041173 http://crane-ding.iteye.com/blog/968862 http://www.ibm.com/de ...
- VC多线程编程
一.问题的提出 编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX ...
- Json也可以这么使
public string GetJSON() { //Json数据 string json112 = "{\"control_info\":{\"imei\& ...
- Shell脚本编程具体解释
第12章 Shell脚本编程 l Shell命令行的执行 l 编写.改动权限和运行Shell程序的步骤 l 在Shell程序中使用參数和变量 l 表达式比較.循环结构语句和条件结构语句 l ...
- hdu1248
Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡 ...
- arm:jlink调试和直接烧写运行的不同 [mdk s3c2440]
1.对全局变量的初始化. 2.还没发现的事例. /*************************************************/ 先上连接文件sct LR_ROM1 0x3000 ...
- android-studio 安装gradle
http://services.gradle.org/distributions 下载需要的gradle 放到C:\Users\Administrator\.gradle\wrapper\dists\ ...
- boost库中thread多线程详解2——mutex与lock
1. mutex对象类 mutex类主要有两种:独占式与共享式的互斥量.▲ 独占式互斥量:mutex: 独占式的互斥量,是最简单最常用的一种互斥量类型try_mutex: 它是mutex的同义词,为了 ...