简单问题:页面生存周期

lsd123 2009-12-11 03:14:24
<input  id="Button2" onclick="location.href='<%= MyParentUrl %>'" type="button"	value=" 返 回 " />


这段代码会在那个阶段执行?在PreInit前执行?
onclick="location.href='<%= MyParentUrl %>'",如果MyParentUrl没跟类文件里对应,
比如类里是ParentUrl,就会报错:
与“System.IO.TextWriter.Write(char)”最匹配的重载方法具有一些无效参数

问题:
刚碰到这个问题时,我在Page_PreInit,Page_Load处设置断点调试不成功,
没执行到就已报错,所以我想知道这段代码会在那个阶段执行?

...全文
235 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqtoo 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 l171147904 的回复:]
onclick="location.href=' <%# MyParentUrl %>'"

MyParentUrl 必须在 后台有定义
[/Quote]

up
lsd123 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sp1234 的回复:]
呵呵,给你出个“自力更生”研究问题的方法。你可以写这样一个测试:HTML code<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%><%
adfa%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title></title></head><body><formid="form1" runat="server"><div><inputid="Button2" onclick="location.href='<%= ABC() %>'" type="button" value=" 返 回 "/></div></form></body></html>

然后点击右键选择“使用浏览器查看”(不要让vs编译它),你就能看到出错提示画面,这个画面上有个选项就可以看到编译出来的源代码。

从源代码上可以看到,编译器是让asp.net在Render的时候执行:C# codeLine261: @__w.Write("\r\n <div>\r\n <input id=\"Button2\" onclick=\"location.href=\'");
Line262:
Line263:#line 14 "D:\Users\WestWuwei\Documents\Visual Studio 2010\WebSites\WebSite1\Default.aspx"
Line264: @__w.Write( ABC() );
Line265:
Line266:
Line267:#line default
Line268:#line hidden
Line269: @__w.Write("\'\" type=\"button\" value=\" 返 回 \" />\r\n </div>\r\n");
[/Quote]

如果把ABC()改成ABC,让他报错,但为什么我在Page_PreInit,Page_Load处设置断点调试不成功,
没执行到就已报错?
lsd123 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sp1234 的回复:]
引用 14 楼 jshi123 的回复:
1。服务器代码块中的内联表达式是在Page.FrameworkInitialize中执行的,FrameworkInitialize在完成类构造后立刻执行,早于PreInit,PreLoad任何其它事件


嘿嘿,且不管这句话对不对,至少没有仔细看楼主贴出的代码。楼主贴出的根本不是“服务器代码块”。
[/Quote]

那如果是“服务器代码块”的话,这句话对不对啊?
lsd123 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sp1234 的回复:]
呵呵,给你出个“自力更生”研究问题的方法。你可以写这样一个测试:HTML code<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"%><%
adfa%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title></title></head><body><formid="form1" runat="server"><div><inputid="Button2" onclick="location.href='<%= ABC() %>'" type="button" value=" 返 回 "/></div></form></body></html>

然后点击右键选择“使用浏览器查看”(不要让vs编译它),你就能看到出错提示画面,这个画面上有个选项就可以看到编译出来的源代码。

从源代码上可以看到,编译器是让asp.net在Render的时候执行:C# codeLine261: @__w.Write("\r\n <div>\r\n <input id=\"Button2\" onclick=\"location.href=\'");
Line262:
Line263:#line 14 "D:\Users\WestWuwei\Documents\Visual Studio 2010\WebSites\WebSite1\Default.aspx"
Line264: @__w.Write( ABC() );
Line265:
Line266:
Line267:#line default
Line268:#line hidden
Line269: @__w.Write("\'\" type=\"button\" value=\" 返 回 \" />\r\n </div>\r\n");
[/Quote]

太谢谢了,
YJJ0708 2009-12-12
  • 打赏
  • 举报
回复
不清楚
shelless 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 mzjmicrosoft 的回复:]
一不小心 又涨知识了
呵呵

[/Quote]

这句话好笑。呵呵

mzjmicrosoft 2009-12-11
  • 打赏
  • 举报
回复
一不小心 又涨知识了
呵呵
  • 打赏
  • 举报
回复
呵呵,给你出个“自力更生”研究问题的方法。你可以写这样一个测试:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%
adfa
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button2" onclick="location.href='<%= ABC() %>'" type="button" value=" 返 回 " />
</div>
</form>
</body>
</html>


然后点击右键选择“使用浏览器查看”(不要让vs编译它),你就能看到出错提示画面,这个画面上有个选项就可以看到编译出来的源代码。

从源代码上可以看到,编译器是让asp.net在Render的时候执行:
Line 261:              @__w.Write("\r\n    <div>\r\n        <input  id=\"Button2\" onclick=\"location.href=\'");
Line 262:
Line 263: #line 14 "D:\Users\WestWuwei\Documents\Visual Studio 2010\WebSites\WebSite1\Default.aspx"
Line 264: @__w.Write( ABC() );
Line 265:
Line 266:
Line 267: #line default
Line 268: #line hidden
Line 269: @__w.Write("\'\" type=\"button\" value=\" 返 回 \" />\r\n </div>\r\n ");
mzjmicrosoft 2009-12-11
  • 打赏
  • 举报
回复
进来看楼上
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jshi123 的回复:]
1。服务器代码块中的内联表达式是在Page.FrameworkInitialize中执行的,FrameworkInitialize在完成类构造后立刻执行,早于PreInit,PreLoad任何其它事件
[/Quote]

嘿嘿,且不管这句话对不对,至少没有仔细看楼主贴出的代码。楼主贴出的根本不是“服务器代码块”。
jshi123 2009-12-11
  • 打赏
  • 举报
回复
那你还有什么问题?
lsd123 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jshi123 的回复:]
在Page_Load中给MyParentUrl赋值是不可能有用的

你可以把内联表达式改成绑定表达式:
<%# MyParentUrl %>

然后在Page_Load事件中加上下面这句(在给MyParentUrl赋值以后):
Page.DataBind();

另外一个办法是把MyParentUrl改写成属性,在get方法中去取值,这样可以不用考虑谁先谁后,用到时再取值。
[/Quote]

但事实上我就是在Page_Load中给MyParentUrl赋值,而且可用的,
可能我没把问题说清楚
jshi123 2009-12-11
  • 打赏
  • 举报
回复
在Page_Load中给MyParentUrl赋值是不可能有用的

你可以把内联表达式改成绑定表达式:
<%# MyParentUrl %>

然后在Page_Load事件中加上下面这句(在给MyParentUrl赋值以后):
Page.DataBind();

另外一个办法是把MyParentUrl改写成属性,在get方法中去取值,这样可以不用考虑谁先谁后,用到时再取值。
lsd123 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyanfss 的回复:]
<%= MyParentUrl %>
这个是在你的类初始化完成,并且事件响应函数执行结束后执行
[/Quote]

原来答案在这里
lsd123 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jshi123 的回复:]
1。服务器代码块中的内联表达式是在Page.FrameworkInitialize中执行的,FrameworkInitialize在完成类构造后立刻执行,早于PreInit,PreLoad任何其它事件

2。与“System.IO.TextWriter.Write(char)”最匹配的重载方法具有一些无效参数
MyParentUrl应该返回字符串类型,而不是char类型

[/Quote]
谢谢,终于看到不同的答案了,

但我有以下疑问:
如果在Page_Load事件前执行,MyParentUrl的值那里来?我是在Page_Load事件里给MyParentUrl赋值的
jshi123 2009-12-11
  • 打赏
  • 举报
回复
1。服务器代码块中的内联表达式是在Page.FrameworkInitialize中执行的,FrameworkInitialize在完成类构造后立刻执行,早于PreInit,PreLoad任何其它事件

2。与“System.IO.TextWriter.Write(char)”最匹配的重载方法具有一些无效参数
MyParentUrl应该返回字符串类型,而不是char类型
lsd123 2009-12-11
  • 打赏
  • 举报
回复
那为什么我调试的时候不成功?没进去就报错,各位感兴趣的可以试下

有没有人测试过啊?
lsd123 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 webdiyer 的回复:]
改成这样:

onclick='location.href=" <%= MyParentUrl %>"'

注意单引号和双引号的位置
[/Quote]

你就是webdiyer,我们都在用你的控件
webdiyer 2009-12-11
  • 打赏
  • 举报
回复
改成这样:

onclick='location.href="<%= MyParentUrl %>"'

注意单引号和双引号的位置
lsd123 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaojing7 的回复:]
Init 事件

[/Quote]

那为什么我调试的时候不成功?没进去就报错,各位感兴趣的可以试下
加载更多回复(9)

62,046

社区成员

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

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

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

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