首页
|
空间
|
新闻
|
论坛
|
博客
|
下载
|
读书
|
网摘
|
视频
|
书店
|
程序员
|
求职招聘
|
项目交易
|
培训
|
网址
欢迎您:
游客
|
退出
|
登录
注册
|
帮助
CSDN
-
CSDN社区
-
.NET技术
-
ASP.NET
管理菜单
置顶
推荐
取消推荐
锁定
解锁
移动
编辑
删除
帖子加分
生成帖子
结 贴
发 帖
回 复
收藏
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
将 WebForm 页面上的所有用户控件序列化的问题
[问题点数:
200
分
,结帖人:shove
]
shove
(shove)
等 级:
结帖率:
100.00%
楼主
发表于:2009-01-09 22:34:46
我这样写,生成了文件。但是结果不正确。
IFormatter formatter = new BinaryFormatter();
Stream stream = null;
try
{
stream = new FileStream("e:\\aaaa.txt", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, this.Controls);
}
catch
{
}
finally
{
if (stream != null)
{
stream.Close();
}
}
请问各位大侠,这样该怎样实现呢?
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
回复次数:
19
dayizhixiaotutu
(你妻负我)
等 级:
#1楼 得分:5
回复于:2009-01-09 22:50:24
将控件序列化 不明白 学习
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
yeness
(请输入你的社区昵称)
等 级:
#2楼 得分:5
回复于:2009-01-09 22:59:05
不明白
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
sp1234
(龙芯偷盗8年终于“合理”购买了)
等 级:
#3楼 得分:100
回复于:2009-01-09 23:11:46
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
javakiki
等 级:
#4楼 得分:5
回复于:2009-01-10 00:05:18
引用 3 楼 sp1234 的回复:
有太多的问题。就算可以序列化/反序列化出来的东西也不是原来的等价功能的东西(有太多的东西都会运行时垮掉)。
你应该多探索一些深度,再创意。例如当你序列化、反序列的时候,你知道事件序列化和反序列之后的后果是什么吗?不知道,应该自己写一个(不是asp.net控件)程序试试开发一个简化的代码,从简单的做起。
我关注你很久了...
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
sp1234
(龙芯偷盗8年终于“合理”购买了)
等 级:
#5楼 得分:35
回复于:2009-01-10 00:34:28
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
shove
(shove)
等 级:
#6楼 得分:0
回复于:2009-01-10 09:05:03
sp1234 大侠说得很有理。
看来这种方法行不通了。
其实我的需求是这样的:
public class PageBase : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
// 这里按需要装载了好多 UserControl。
// this.Form.Controls.Add(N 个);
}
}
public partial class _Default : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
因为 PageBase 的 OnLoad 中的装载时还有一些比较复杂的代码,很消耗 CPU 资源, 而且发现这个方法每次都是执行 2 次!
弄了好久没有找到如何让他不装载 2 次的办法。
所以才朝如题这种方面想了。
请 sp1234 及各位大侠支招,谢谢!!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
KimmKing
(秦风意动(qsoft开源工作室)
等 级:
#7楼 得分:30
回复于:2009-01-10 09:21:54
得分回复需要阅读,请
登录
CSDN!
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
KimmKing
(秦风意动(qsoft开源工作室)
等 级:
#8楼 得分:5
回复于:2009-01-10 09:23:25
C# code
而且发现这个方法每次都是执行
2
次
!
你没有判断page的postback
ps:
viewstate的原理就差不多是“序列化”。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
ynw506
(我要学坏,谁教我?)
等 级:
#9楼 得分:5
回复于:2009-01-10 09:23:25
mark~~
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
shove
(shove)
等 级:
#10楼 得分:0
回复于:2009-01-10 10:11:48
引用 8 楼 KimmKing 的回复:
C# code而且发现这个方法每次都是执行 2 次!
你没有判断page的postback
ps:
viewstate的原理就差不多是“序列化”。
8楼把问题看简单了。
无论是:
if (!IsPostBack)
{
// 装载
}
还是
if (IsPostBack)
{
// 装载
}
经检验,都是执行 2 次。
这里的代码本来就消耗 CPU,多执行一次就更不得了。
请高手赐教。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
KimmKing
(秦风意动(qsoft开源工作室)
等 级:
#11楼 得分:0
回复于:2009-01-10 10:17:00
引用 10 楼 shove 的回复:
引用 8 楼 KimmKing 的回复:
C# code而且发现这个方法每次都是执行 2 次!
你没有判断page的postback
ps:
viewstate的原理就差不多是“序列化”。
8楼把问题看简单了。
无论是:
if (!IsPostBack)
{
// 装载
}
还是
if (IsPostBack)
{
// 装载
}
经检验,都是执行 2 次。
这里的代码本来就消耗 CPU,多执行一次就更不得了。
请高手赐教。
这个判断是在Base里的?
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
KimmKing
(秦风意动(qsoft开源工作室)
等 级:
#12楼 得分:0
回复于:2009-01-10 10:18:26
一次request不可能调用两次,
只有回传还会load,区分开,绝不会掉两次
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
shove
(shove)
等 级:
#13楼 得分:0
回复于:2009-01-10 10:21:07
刚检验,
public class PageBase : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
// 写当前时间到一个文本文件
}
}
public partial class _Default : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
这样,打开网页,写入一次。刷新一下,写入一次。 这样还起来完全正常。
但是:
当把
public class PageBase : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
// 写当前时间到一个文本文件
}
}
这个放在另外一个项目,编译成 dll,
情况就不一样了,
每次一打开网页,就运行了 2 次,刷新一下页面,又写了 2 次。
很是奇怪。
哪位大侠把机制讲解一下。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
mengxj85
(漂零)
等 级:
#14楼 得分:5
回复于:2009-01-10 11:17:58
学习
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
KimmKing
(秦风意动(qsoft开源工作室)
等 级:
#15楼 得分:0
回复于:2009-01-10 11:55:47
两次的问题,可以尝试的方法:
1、检查设计器里的代码,是不是注册了两次
2、清空vs的缓存,清理,重新编译,运行
还不行的话,没办法了,
当年,慕白兄和思归都没搞定:
http://topic.csdn.net/t/20041210/15/3634069.html
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
sunhongliang100
等 级:
#16楼 得分:5
回复于:2009-01-13 15:47:46
友情up
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
shove
(shove)
等 级:
#17楼 得分:0
回复于:2009-01-13 18:15:58
谢谢各位,问题解决:
页面上有一个用户控件,用户控件使用了 Ajax。
Ajax 执行了一次页面的 OnLoad。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
shove
(shove)
等 级:
#18楼 得分:0
回复于:2009-01-14 08:24:28
为了不给大家造成误导,特修正我自己在 17 楼的错误:
1、经晚上仔细研究,不是 Ajax 执行了一次 OnLoad
2、是页面上的自定义用户控件造成的。
现象:Web自定义用户控件,如果不重写 Render 方法,则不会造成 OnLoad 2 次执行,如果 protected override void Render(HtmlTextWriter output) 改写这个方法,则会造成 OnLoad 2 次执行。
与 IsPostBack 无关。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
shove
(shove)
等 级:
#19楼 得分:0
回复于:2009-01-15 15:00:38
罪魁祸首是:
<img src="" .... />
当页面上出现了 src="" 空串时,
Page_Load、 OnLoad、 Init 等等都执行 2 次。
我上面说的那个控件中出现了这个,所以导致执行 2 次。
而该Web自定义用户控件如果不重写 Render, 用自己默认的方法,就不会。
--------------------------------------------------
总之, <img src="" 换为 <img src="about:blank" 就没有任何问题了。
对我有用
[
0
]
丢个板砖
[
0
]
引用
举报
管理
TOP
管理菜单
置顶
推荐
取消推荐
锁定
解锁
移动
编辑
删除
帖子加分
生成帖子
结 贴
发 帖
回 复
相关问题
最近也在找工作,整理一些面试遇到的题目,大家一起做做! .NET技术 ...