.net的回调问题

neil 2008-07-02 05:39:03
今天我做了个小实验,代码如下:
<div>
<asp:TextBox ID="Text1" runat="server" EnableViewState="False"></asp:TextBox>
<br/>
<input type="text" id="Text2"/>
<br/>
<input type="text" id="Text3" runat="server"/>
<br/>
<asp:Button ID="Button1" runat="server" Text="提交"/>
</div>

运行进入页面后,在Text1,Text2,Text3中分别输入文字
为什么在点击了"提交"后,Text1的文字保存在页面中,Text2,Text3的文字在调转后就没了呢?
...全文
294 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
neil 2008-07-04
  • 打赏
  • 举报
回复
在解析成html后,是出来了以下的一个隐藏控件:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTEyNTI1NjQ4NTJkZP73T0qSar/gOVcUUMtr1DKHDIcT" />
我想知道,是不是在这里,已经把所有的服务器控件的ID,及相应的值都存储了起来;
并且这个隐藏控件不认其他,只认runat是否为server;
hy_lihuan 2008-07-02
  • 打赏
  • 举报
回复
lz你写的代码没有所以无法判断你的实验是否成功;
首先说明一点:<asp:TextBox ID="Text1" runat="server" EnableViewState="False"> </asp:TextBox>
这个控件和<asp:TextBox ID="Text1" runat="server"> </asp:TextBox>是没有区别的;不是因为试图状态的问题;而是TextBox服务器控件在解析为html代码时是<input>,所以里面的值还是会传递和保留的;和上面所说的,EnableViewState这个状态的测试不要使用TextBox控件;
其他的看一下7楼的说明把
sunlovesea 2008-07-02
  • 打赏
  • 举报
回复
顶....
hubblebubblepig 2008-07-02
  • 打赏
  • 举报
回复
TextBox的EnableViewState看不出效果 因为它的text的属性的更改是通过接受用户的输入而改变的 而不是取的视图状态的值

viewstate的状态在页面开始生成到接受用户输入这个期间来加载 然后再通过接受的用户的输入来覆盖(扩充)已经加载的状态 最终生成页面

text2没有值 正是因为它不是runat=server 用户的输入没有对它起作用 它呈现的始终是页面默认的状态(html中写好的最初状态)
Fus371x 2008-07-02
  • 打赏
  • 举报
回复
其实你做了这三个的对比,答案也就出来了.原因就在于 EnableViewState="False" 这个属性.原理就是ASP.NET引用了viewstate的机制,在服务器端保存了网页各个控件及页面的状态,这其中包括各个控件在页面上的布局,和他们各自的属性.这些值就保存在ViewState下.可以观察下Aspx页面的html源代码,看看<asp:TextBox ID="Text1" runat="server" EnableViewState="False"> </asp:TextBox>这个是不是多了一个名为"_VIEWSTATE"的属性,其值是一长串字符,类型为"hidden".这个值记录的就是控件和页面的状态信息.当用户对页面进行相关操作的时候,状态值发生改变,并将改变的值传递给服务器端.服务器端在比较改变后的状态值和初始值之间的区别,以响应具体的请求.
这样做有个好处就是:如果我们在开发Web应用程序时,某些控件是不需要接受用户的操作或只需要接受一次操作的时候,我们可以将这些控件的EnableViewState属性改为false,这样可以优化我们的程序,提高网络访问的速度.
qiuming0306 2008-07-02
  • 打赏
  • 举报
回复
应当只有Text3 有值!
yaazz 2008-07-02
  • 打赏
  • 举报
回复
EnableViewState属性默认为True
眼里进了砂 2008-07-02
  • 打赏
  • 举报
回复
Text1/Text3 都是服务器控件啊,EnableViewState可以弄个如楼上所说的DropDownList来看
asdfgh_5982 2008-07-02
  • 打赏
  • 举报
回复
结果应该是Text1/Text3的文字保存在页面中,Text2的文字在调转后就没了.
<asp:TextBox ID="Text1" runat="server" EnableViewState="true"> </asp:TextBox>
text1中和text3中也是还含有文字的!
没太懂楼主的意思,如果想试试EnableViewState的效果,不如拉个<asp:DropDownList>试试
yyq136 2008-07-02
  • 打赏
  • 举报
回复
应该是你没有进行IsPostBack处理

62,074

社区成员

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

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

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

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