默认情况下是客户端验证,这里我也只允许在客户端完成当RegularExpressionValidator 验证失败的时候 会显示错误.下面是一个验证控件
<asp:RegularExpressionValidator  ID="RegularExpressionValidator1" runat="server" ValidationExpression="[^!@#$]*" ControlToValidate="NeiRong" ErrorMessage="字符串格式错误"></asp:RegularExpressionValidator>我的正则表达式是不允许包含!@#$字符只有包含了!@#$字符的时候,验证才会失败,会返回ErrorMessage的值,重点来了.我想把错误的字符串包含在ErrorMessage里面一起返回.
当用户输入: !@W 的时候,返回:字符串格式错误!@
请高手指教,怎么样才能实现我的目的.注意:需要在客户端执行.用javascript做 可以轻松实现.但是现在必须用RegularExpressionValidator
当然 可以javascript配合RegularExpressionValidator来实现,请高手指教

解决方案 »

  1.   

    to finish this work,I suggest you:
    first,don't use the servercontrol,but htmlcontrol.
    to make it easily,just call the js method will be ok.function checkinput(item)
    {
    if(item.value.indexOf("@")>=0)
    {
    alert("字符串格式错误:"+item.value.substring(0,item.value.indexOf("@")));
    return false;
    }
    //and so on ...
    }
    then set this method to the onkeypress event.
      

  2.   

    首先要明白:你的验证是在客户端还是在服务器端?在客户端可以用脚本。在服务器可以MsgLabel.Text = "您的输入没有通过了数据验证:" + RegularExpressionValidator1.ErrorMessage + ((TextBox)Page.FindControl(RegularExpressionValidator1.ControlToValidate)).Text;
      

  3.   

    其实用javascript很容易实现,但你一定要RegularExpressionValidator,这分明就是为难自己。不过你要为难自己也还是有办法解决的,如果这是为了让东西看起来更规范的话(全部都是标准的Validator)。方法1:打开Validator公用的那个js文件,找到控制Validator控件在客户端style.display/style.visibility属性的那个部分,添加上你的逻辑让你动态改变该控件在客户端的innerText。既然你知道如果独立用javascript做可以做,那么这个我也不详细解释javascript如何实现了。方法2:这是我觉得比较规范的做法,其实是方法1的改良。你继承RegularExpressionValidator,但是它不用原来的javascript,而用你的script来validate和控制客户端反馈,至于详细的script你自己用Page.RegisterClientScriptBlock写到页面里去。很老实说,我有时候也会做这样的事情,我容忍不了所有校验都是Validator但有一个校验是用很简单的script加<div>或服务器端Label实现的。我通常的做法就是继承一个适合的Validator然后自己做一个,这样的Validator日后还可以复用。
      

  4.   

    非常感谢  net_lover(孟子E章)  提供的服务端验证方法。这里需要的是客户端验证.cat_hsfz() 说的不错,思路应该是正确的。但是你说的  Validator 这个文件 在那里 我更本没看到啊。RegularExpressionValidator 控件提供了客户端验证,那么肯定是在客户端实现的,是怎么实现的我们不知道。如果知道了 是怎么实现的。就可以在它验证后肯定会触发一个事件,通过什么都不能显示,没通过,则显示 提示信息。现在我们只需在它的提示信息后面 + 一段脚本获取错误内容的代码 就OK了这时 当验证失败的时候 则显示:  输入格式错误 + 脚本(获取错误的字符);但是这些事情都是控件的功能,所以我无从下手啊。
      

  5.   

    你看看用了Validator的页面输出的HTML,你就能够找到<script src="/aspnet_client/..." ...></script>这样一个片断,然后你就看你的Web站点根目录,找aspnet_client这个目录顺着找下去,你就能够找到那些js了。一个控件引发PostBack时其实就是在客户端执行__doPostBack()这个function,而如果有Validator控件,则会在__doPostBack()前先引发校验,校验成功才PostBack,否则校验代码负责控制相应错误信息的显示。