asp.net 同一个页面中如何保持变量的值在多个事件中变换???
来源:互联网 发布:狼居胥山在哪 知乎 编辑:程序博客网 时间:2024/06/05 14:32
先看看我的问题吧。进行“修改牛腩系统新闻”模块时,新闻这个表中的字段(新闻类别,新闻标号,新闻标题,新闻内容)除了新闻标号不可以修改,其他都是可以更改的。修改新闻界面如下:
页面上缺少新闻标号,我们要进行新闻修改是,要根据新闻标号进行修改,怎么办?
我们可以从新闻列表页跳转过来的时候,就把“新闻标号”赋值给一个全局变量。
思路:在form 中定义了一个全局变量,
//全局变量,新闻标号 //string newsid;
在页面load中给变量赋值: protected void Page_Load(object sender, EventArgs e) {//给变量赋值 newsid = dtNews.Rows[0][0].ToString(); }
在“修改新闻”事件中调用:
protected void btnupdate_Click(object sender, EventArgs e) {updateflag = new NewsManage().Update(newsid);}
结果发现:加载的时候newid的值确实被赋值了,但是但我们再次触发“修改新闻”按钮时,页面刷新,newsid的值消失了,所以,我们单纯的使用全局变量达不到我们的目的。
那我们只好换方法了。我们可以通过以下四种来实现。
第一种:将全局变量换成“Static”。
//静态变量,新闻标号 //static string newsid;
接下来的复制,调用,同上。
第二种:使用viewstatic。
首先:什么是viewstatic?
ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。
ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能。它的类型是system.Web.UI.StateBag,一个名称/值的对象集合。当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。
使用:1、不需要在form 中定义变量:在页面load中给变量赋值:
protected void Page_Load(object sender, EventArgs e) {//第二种:页面级的变量,只要页面不消失,就存在 //ViewState["newsid"] = dtNews.Rows[0][0].ToString(); }
2、调用:
protected void btnupdate_Click(object sender, EventArgs e) {Newsid = ViewState["newsid"].ToString();updateflag = new NewsManage().Update(Newsid);}
第三种:使用session。
与第二种viewstate的使用是一样的。只是把viewstate换成session即可。
第四种:使用asp.net 隐藏属性:hiddenfield。
1、要在前台页面中定义hiddenfield属性。
<!--隐藏属性--> <asp:HiddenField ID="newsid" Value ="" runat="server" />
2、在后台页面中复制:
protected void Page_Load(object sender, EventArgs e) {//第四种:使用属性:在前台页面中定义 newsid.Value = dtNews.Rows[0][0].ToString(); }
3、调用:
protected void btnupdate_Click(object sender, EventArgs e) {Newsid = newsid.Value ;updateflag = new NewsManage().Update(Newsid);}
以上方法都可以使用成功,第四种的隐藏属性不经常使用。
Viewstate和Session的使用区别:简单点说,session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重.而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此,我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面.而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上.另外,session在默认情况下20分钟就过期,而viewstate则永远不会过期.
但viewstate并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable以及自定义的一些类型.
发现只要下决心,解决一个问题,总会有藏不住的方法。
- asp.net 同一个页面中如何保持变量的值在多个事件中变换???
- 如何在ASP.NET中PostBack后保持页面的位置(滚动条位置)
- 如何在ASP.NET中PostBack后保持页面的位置(滚动条位置)
- ASP.NET中让同一个页面不同的文本框回车响应不同的事件
- asp.net 的框架问题 使多个页面在同一个页面中显示
- easyui tabs 在同一个页面中打开多个tab多页面中变量名或函数名重复问题
- ASP.NET中页面回传后保持滚动条的位置
- ASP.net中怎么控制同一个用户在多个地方同时登陆服务器?
- asp.net如何在事件中启动线程来打开一个页面
- 在同一个页面中加载多个不同的jQuery版本
- Asp.net中一个页面多个表单的解决方案
- 在asp.net 页面中,点击回车键触发Button事件
- 在ASP.NET页面中手工写事件处理函数
- 在一个.net sln中包含多个project,project引用同一个dll导致的错误
- 在ASP.NET中页面传值
- ASP.NET中Session的状态保持
- [Unity&JSON]如何在同一个JSON文档中存入多个不同类型的数据
- 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
- LeetCode_Permutation Sequence
- 局域网实时通讯工具
- 杭电NEU 动规专题 Q
- 使用Create出现WSAEADDRINUSE错误的解决办法
- 动态规划小结
- asp.net 同一个页面中如何保持变量的值在多个事件中变换???
- 计算的力量:钱难挣,屎难吃
- VMware无法识别USB设备的解决方法
- SQL显示表子段信息的语句
- CORBA回调函数在C#项目环境中的应用
- 十六进制颜色转 UIColor
- win7系统无线网卡笔记本制作无线路由器
- 系统里有Courier New字体 Eclipse没有这个字体选项
- Remote host closed connection during handshake和SSL peer shut down incorrectly报错的解决方法