怎么解决当页面禁用ViewState的时候,仍想保持某些服务器控件的状态

jonas401 2007-05-14 10:10:26
去搜索了一下,可以用控件ControlState
但是,那是在自定义控件中才可以用的

我现在想使TextBox, RadioButton等控件能保持它的ControlState应该怎么做呢
...全文
931 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rail100 2007-05-15
  • 打赏
  • 举报
回复
继承控件,重写LoadControlState和SaveControlState方法
hertcloud 2007-05-15
  • 打赏
  • 举报
回复
http://www.webjx.com/htmldata/2006-06-08/1149748147.html
bwangel 2007-05-15
  • 打赏
  • 举报
回复
,普通要传递值的控件的值不管ViewState是否禁用,都是要保持的.这属于ControlState,和ViewState是有区别的. textbox和radio的值无论何时都是保持的
jonas401 2007-05-14
  • 打赏
  • 举报
回复
to qiaoxinwei(小新):
这种方式我看到过

这是自定义控件中重写两个方法实现的
我现在想直接用现有控件
jonas401 2007-05-14
  • 打赏
  • 举报
回复
to amandag(高歌):

因为我的页面中有PostBack
所以,某些控件的信息仍需要保留,回传到服务员
  • 打赏
  • 举报
回复
用两种方式实现了状态管理
ViewState和ControlState
  • 打赏
  • 举报
回复
// IndexButton.cs
using System;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Samples.AspNet.CS.Controls
{
[
AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level=AspNetHostingPermissionLevel.Minimal),
ToolboxData("<{0}:IndexButton runat=\"server\"> </{0}:IndexButton>")
]
public class IndexButton : Button
{
private int indexValue;

[
Bindable(true),
Category("Behavior"),
DefaultValue(0),
Description("The index stored in control state.")
]
public int Index
{
get
{
return indexValue;
}
set
{
indexValue = value;
}
}

[
Bindable(true),
Category("Behavior"),
DefaultValue(0),
Description("The index stored in view state.")
]
public int IndexInViewState
{
get
{
object obj = ViewState["IndexInViewState"];
return (obj == null) ? 0 : (int)obj;
}
set
{
ViewState["IndexInViewState"] = value;
}
}

protected override void OnInit(EventArgs e)
{
base.OnInit(e);
Page.RegisterRequiresControlState(this);
}

protected override object SaveControlState()
{
// Invoke the base class's method and
// get the contribution to control state
// from the base class.
// If the indexValue field is not zero
// and the base class's control state is not null,
// use Pair as a convenient data structure
// to efficiently save
// (and restore in LoadControlState)
// the two-part control state
// and restore it in LoadControlState.

object obj = base.SaveControlState();

if (indexValue != 0)
{
if (obj != null)
{
return new Pair(obj, indexValue);
}
else
{
return (indexValue);
}
}
else
{
return obj;
}
}

protected override void LoadControlState(object state)
{
if (state != null)
{
Pair p = state as Pair;
if (p != null)
{
base.LoadControlState(p.First);
indexValue = (int)p.Second;
}
else
{
if (state is int)
{
indexValue = (int)state;
}
else
{
base.LoadControlState(state);
}
}
}
}

}
}

amandag 2007-05-14
  • 打赏
  • 举报
回复
TextBox控件的信息不是保存在视图状态里的,即使你禁用了页面的视图状态,它的内容仍然保留
zhaozhao110 2007-05-14
  • 打赏
  • 举报
回复
jf,没用过其他的.
jonas401 2007-05-14
  • 打赏
  • 举报
回复
to sd4709494(╃饺子制造╊) : tks
Ericcsdn 2007-05-14
  • 打赏
  • 举报
回复
QQ群:323373
sd4709494 2007-05-14
  • 打赏
  • 举报
回复
忘记了``我这里有本书是写这个的viewstate控制。现在没时间很忙很忙等下帮你翻翻
amandag 2007-05-14
  • 打赏
  • 举报
回复
自定义控件可绝对不简单,基本所有的书都是泛泛介绍
Zine_Alone 2007-05-14
  • 打赏
  • 举报
回复
sp1234(我喜欢不下雨的阴天) 说法比较直接了一点,但是自定义控件确实不是你想像的这么简单.

起码你要通晓
1.Page的生命周期
2.ViewState的实现
3.Page 加载,处理ViewState.
  • 打赏
  • 举报
回复
我告诉你一个真正看csdn信誉的办法:

http://www.google.cn/advanced_search?q=sd4709494+site:community.csdn.net&hl=zh-CN&lr=&newwindow=1&rls=com.microsoft:en-US&as_qdr=all

你可以看看有信誉的人都是怎么回答问题的。
  • 打赏
  • 举报
回复
你的问题可以跟自己开发那些控件的问题相媲美。
sd4709494 2007-05-14
  • 打赏
  • 举报
回复
我怎么觉得sp1234的话有点别扭``
看信誉就知道RP不行
  • 打赏
  • 举报
回复
哦,那你自己写吧。

一个RadioButton中相信有不少于40个属性需要保持,并且你要准确地放入asp.net页面对控件树的处理生命期中。

对初学者,说根本你听不懂的技术又有什么意思呢?
sd4709494 2007-05-14
  • 打赏
  • 举报
回复
。。把它们的值添加到Attributes-_-!!!
jonas401 2007-05-14
  • 打赏
  • 举报
回复
to sp1234(我喜欢不下雨的阴天) :你是坐着说话不腰疼
加载更多回复(3)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧