【彻底疯了】一个服务器验证控件而已,居然越搞越复杂!

freeflying1222 2008-07-16 04:18:44
新开一帖,原帖:http://topic.csdn.net/u/20080716/10/67c1e697-c222-4b7f-b2e8-a7d99432abd4.html?seed=382442734#replyachor
根据msdn的说法,服务器控件的验证(比如RequiredFieldValidator)是在服务器端进行验证的。当EnableClientScript=ture时,验证还会在客服端进行。有高手认为不对的么?
但我又搞不懂了下面这段代码:
<%@ Page Language="C#" %>

<script runat="server">

void Button_Click(Object sender, EventArgs e)
{
if (Page.IsValid)
{
MessageLabel.Text = "Page submitted successfully.";
}
else
{
MessageLabel.Text = "There is an error on the page.";
}
}

</script>

<html>
<body>
<form runat="server">

<h3>Validator Example</h3>

Enter a number from 1 to 10.
<asp:textbox id="NumberTextBox"
runat="server"/>

<asp:rangevalidator id="NumberCompareValidator"
controltovalidate="NumberTextBox"
enableclientscript="False"
type="Integer"
display="Dynamic"
errormessage="Please enter a value from 1 to 10."
maximumvalue="10"
minimumvalue="1"
text="*"
runat="server"/>

<asp:requiredfieldvalidator id="TextBoxRequiredValidator"
controltovalidate="NumberTextBox"
enableclientscript="False"
display="Dynamic"
errormessage="Please enter a value."
text="*"
runat="server"/>

<br><br>

<asp:button id="SubmitButton"
text="Submit"
onclick="Button_Click"
runat="server"/>

<br><br>

<asp:label id="MessageLabel"
runat="server"/>

<br><br>

<asp:validationsummary
id="ErrorSummary"
runat="server"/>

</form>
</body>
</html>

csdn的实例代码。当我把enableclientscript="False" 设置为true时,void Button_Click(Object sender, EventArgs e)
{
if (Page.IsValid)
{
MessageLabel.Text = "Page submitted successfully.";
}
else
{
MessageLabel.Text = "There is an error on the page.";
}
}
没反应了!
郁闷啊。怎么解释得通呢?
啊~~~~~吐血
...全文
141 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeflying1222 2008-07-17
  • 打赏
  • 举报
回复
这样总结一下吧,两个问题:
1、当enableclientscript=true时,messagelabel的不显示的原因:
如果客服端验证没通过,所以就不会PostBack,在服务器端运行的Button_Click()方法就无法执行;
如果客户端验证通过,页面就会postback。请4楼注意!
2、而当 enableclientscript=false时,客户端就不会进行验证,所有的验证就交给服务器端了,然后服务器端验证后得到Page.IsValid的值,并在if语句中进行相应的处理。

但是,Page.IsValid的值是怎么得到的呢?是根据客户端判断的结果直接得到的呢,还是在服务器端自己进行了验证才得到的?

freeflying1222 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 asdfgh_5982 的回复:]
lz的代码在我机子上没有任何问题,不管enableclientscript的状态的到底为何,button都有反应!
可能是lz的IDE环境问题
[/Quote]
你输入的是不在0-10之间的数么?比如20试试
weinaxxc 2008-07-17
  • 打赏
  • 举报
回复
我个人觉得服务器段验证控件实用价值不大,有缺陷,在其激活的时候,页面上所有的按牛都不起作用,除非你添好数据,这样一来,如果我要在逻辑上添加一个返回按牛或者别的不需要验证功能的按牛就没意义了!
freeflying1222 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 asdfgh_5982 的回复:]
lz的代码在我机子上没有任何问题,不管enableclientscript的状态的到底为何,button都有反应!
可能是lz的IDE环境问题
[/Quote]
这就惨了!晕
lydiablo 2008-07-16
  • 打赏
  • 举报
回复
验证控件也都是服务器端的!
sxmonsy 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tfrtfr 的回复:]
enableclientscript="true"的时候,由于客户端没有验证通过,所以不会PostBack.当然服务器端代码不会执行。
看来LZ完全没理解验证控件,建议找资料看看。
[/Quote]
tfrtfr 2008-07-16
  • 打赏
  • 举报
回复
enableclientscript="true"的时候,由于客户端没有验证通过,所以不会PostBack.当然服务器端代码不会执行。
看来LZ完全没理解验证控件,建议找资料看看。
aaajedll 2008-07-16
  • 打赏
  • 举报
回复
學習
datahandler2 2008-07-16
  • 打赏
  • 举报
回复
根据msdn的说法,服务器控件的验证(比如RequiredFieldValidator)是在服务器端进行验证的。当EnableClientScript=ture时,验证还会在客服端进行。有高手认为不对的么?
======================================================================
验证控件在客户端验证还是在服务器端验证,取决于EnableClientScript的属性设置。当设置为True则直接在客户端验证。不需要通过服务器端来返验证。多数情况下都是这种验证机制。默认下也是True。只有在比较特殊情况下才使用服务器端验证。比如说你那个待验证控件在某些场合隐藏或Enable=Flase等或你需要在验证这个控件输入前执行部分服务器端代码。此时可以设置该验证方式为服务器端验证。
【详细说明建议还是仔细在阅读MSDN说明】


if (Page.IsValid)
{
MessageLabel.Text = "Page submitted successfully.";
}
else
{
MessageLabel.Text = "There is an error on the page.";
}
=========================
当部分待验证的服务器端控件验证方式设置为服务器端验证。在某些服务器端验证不通过的时候。你可以设置该验证控件的
IsValid=False
然后在一个总处理条件中判断所有输入是否已经符合,也就是全部页面的验证机制是否都已经符合。
如果Page.IsValid符合。则就可以认为已经是符合我们要求的规定。就可以提交数据---比如更新数据库等
不符合。就可以弹出信息提示说哪里不符合信息等。
asdfgh_5982 2008-07-16
  • 打赏
  • 举报
回复
lz的代码在我机子上没有任何问题,不管enableclientscript的状态的到底为何,button都有反应!
可能是lz的IDE环境问题
asdfgh_5982 2008-07-16
  • 打赏
  • 举报
回复
不知道lz把enableclientscript设置为true时后,
如果将enableclientscript再设置为false,button的click事件是否还有反应

根据lz的代码按常理来说enableclientscript再设置,不会影响button
tfrtfr 2008-07-16
  • 打赏
  • 举报
回复
服务器端验证是要自己写代码的。
void Button_Click(Object sender, EventArgs e)
{
if(NumberTextBox.Text == "")
TextBoxRequiredValidator.IsValid=false;

if (Page.IsValid)
{
MessageLabel.Text = "Page submitted successfully.";
}
else
{
MessageLabel.Text = "There is an error on the page.";
}
}

61,817

社区成员

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

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

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

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