asp。net的
asp页有:
文本框testquestion
文本框testanswer
按钮enter
代码页:
pageloud
{
a=生成随机数;
testquestion.Text=a;
}
enter_click
{
if(testquestion==testanswer)
 代码1
else
 代码2
}
为什么根本就不能执行代码1呢?该如何做?请指教?!急!

解决方案 »

  1.   


    调试。。看testquestion和testanswer的值分别得到的是多少。
      

  2.   


    这个不需要调试了吧?原因见下:楼主你不要直接用文本框对象比较,两个实例化的TextBox对象肯定不一样呀。应该是:
    if(testquestion.Text ==testanswer.Text)
     代码1
    else
     代码2
    }
      

  3.   


    应该比较文本框对象的Text属性的值,而非比较文本框对象本身。
    比较文本框对象本身的话,两个实例化后的对象铁定不一样,lz的逻辑是对的,只是比较对象错了而已,已经在三楼说明了,呵呵。
      

  4.   

    我想原因也许是每点击按键一次,就导致pageload执行一次,这时随机数就已经变了,但是我想不出如何保证其不变的方法!
      

  5.   

    Page_Load()
    {
        if (!IsPostBack)
        {
            ... 原来的代码
        }
    }
      

  6.   


    随机数肯定是要变的呀,如果你不让它变,那也就失去验证码的意义了,对不?你自己产生的随机数,即使是随时变化,但是你的代码里面肯定知道的,对不?
    这时你会要求用户在一个TextBox中输入,你把用户输入的文本和你自己产生的随机数对比,没有任何问题,再怎么变化也逃不过你的控制呀,对吧。我上面说的意思是,你代码里面写的是“if(testquestion==testanswer)”,testquestion和testanswer是TextBox,而不是TextBox.Text,你需要比较的是Text呀,应该是“if(testquestion.Text == testanswer.Text)”才对呀,难道我上面没说明白么,郁闷。
      

  7.   

    我表达有误,我的意思是我比较的没错,帖子中是伪代码,我比较的确实是Text的值。
    只是在还没比较的时候,随机数的值也就是testquestion.Text就已经变化了,导致比较错误。这就是原因,但是我想不出解决方案呀
      

  8.   


    那就应该控制testquestion.Text值的生成,你代码中每次新生成随机数的条件是什么呢,只要控制好这个条件就行了。如果是我做,目前我会这样设计:
    1.UI第一次呈现给客户的时候,我会触发生成一个随机数。
      这时客户只需要输入他看到的随机数即可,如果客户除了输入随机数之外,没做其他任何动作,这个随机数不会再次产生。
    2.用户输入随机数,并且点击了“验证”按钮之后,当代码判断到随机数验证不通过时,我会触发生成一个随机数(如果验证通过就不需要了)。
       这时是要求客户重新输入后验证。
    3.用户看不清随机数,点击了“重新生成随机数”按钮之后,我会触发生成一个随机数。我估计一般应该是上面三种情况会触发随机数的重新生成,其他时候不应该主动产生随机数,否则就会出现lz你说的问题了。
      

  9.   

    我的生产随机数的代码在pageload里,我想这就是导致问题的原因,可我不知道该让随机数在何处产生,我试过用public保存这个随机数,导致的新问题是这个随机数不再变化了,除非再次调试
      

  10.   


    不应该放在pageload里,我不知道你的pageload具体是什么,但是感觉应该是UI上的某页面的加载事件。如果是这样的话,随机数的产生就不应该放在pageload里。界面应用程序最忌讳的就是UI和业务逻辑耦合的太强,这样不但代码不能复用,而且也不易维护。建议lz把随机数的生成单独封装成一个独立的方法,这样你的调用就方便了,而且这个随机数的产生规则最基本应该包括我11楼里的三种情况,如果你的需求复杂的话,可能还应该有更多要考虑到的情况。
      

  11.   

    if(testquestion.Text == testanswer.Text)
    这么写也是有问题的,==比较的是Text引用,不是Text引用的字符串的值
    改成if(testquestion.Text.Equal(testanswer.Text))就可以了
      

  12.   


    用Equal肯定没问题,但是关于兄弟说的“==”的问题,确实没看懂。
    另外,Equal并非时刻好用的,在TextBox.Text上没啥问题,但是其他情况下,有可能某对象属性本身就为null,这个时候如果未作保护就直接使用x.Equal的话,是会出问题的,而这时使用“==”来判断却是不会出现异常的,这个现象skyparty兄弟怎么看呢?
      

  13.   

    ==判断的是值是否相等
    对于引用类型 string str; 变量str代表的是字符串的引用(可以当成地址理解),而不是字符串的内容.
    比如 
    string str1=new string("abc");
    string str2=new string("abc");
    str1和str2虽然内容相同,但他们引用的不是堆中的同一块地址
    所以str1!=str2
    而str1.equal(str2)为真
      

  14.   

    这是因为Equal是object对象的一个方法,null表示空引用,所以不存在null.Equal(),会抛出异常
    而null作为一个值,可以用于==比较
    解决null.Equal异常的方法有2种
    1. "常量字符串".Equal(str)
    2. str!=null&&str.Equal(str)
      

  15.   


    这个问题又跑到值类型和引用类型的讨论上来了,呵呵。从理论上讲:string肯定是引用类型,如兄弟所说的,没错。但是string是一种特殊的引用类型,它有时表现出值类型的特征。因为编程者在使用string的时候,其实潜意识中是当成值类型在使用的,我不知道我这个说法你是否认可,但是我感觉ms对于string的处理确实是这样的。从现象上讲:skyparty你从地址方面判断str1!=str2,这个没啥说的,同意,毕竟是引用类型嘛。但是在代码里面str1==str2得到的结果是true,这点你认可么?所以string还是具有值类型的特征的,而且这个也是编程者使用的习惯,呵呵。
      

  16.   

    str1==str2得到的结果是不是true是不一定的
    和运行期的处理有关
    为了优化,节省空间,有时会让2个引用相同内容的字符串变量指向同一个字符串常量,这时候str1==str2为真
    但这个优化不是必须的,所以用==来比较字符串,不一定能得到正确结果
      

  17.   


    能举一个str1!=str2的应用场景么?我试一下,因为平时自己对string的比较都是直接使用“==”判断的,如果确实有兄弟说的这个情况,我也及时改正这个毛病,呵呵。
      

  18.   

    不好意思,误导了.....跟java搞混了,C#把字符串对象和其他对象分别处理了
      

  19.   

    呵呵,C#和Java通吃啊,我Java完全不懂,期待以后有时间可以学习学习。