前些时候做网站的时候需要一个注册界面,用到了图片验证码。为了省点事,直接调用了现成的webservice(呵呵,这里跟大家分享下这个提供服务的网站,http://www.webxml.com.cn/WebServices/ValidateCodeWebService.asmx)。
从网上看的资料,建立一个ValidatePic.aspx的页,专门用来输出图片,页面的后台代码如下:    protected void Page_Load(object sender, EventArgs e)
    {
        MyRandom mr = new MyRandom();
        string valStr = mr.RandNum(4);
        Session["validateSn"] = valStr;//这里有问题??!!
        cn.com.webxml.www.ValidateCodeWebService wr = new cn.com.webxml.www.ValidateCodeWebService();
        byte[] bytesBmp = wr.enValidateByte(valStr);
        Response.BinaryWrite(bytesBmp);
        Response.End();
    }然后,在注册界面上的一个img中引用这个图片,即:  <img id="img1" runat="server" src="~/ValidatePic.aspx" class="ValPicStyle" alt="验证图片"/>验证时,if (validateStr == Session["validateSn"].ToString())
现在,问题是:当我第一次打开vs2008时,运行这个程序,会出现“未将对象设置引用的问题”。以后就OK了。查了些资料,貌似刚开始Session["validateSn"]没有实例化。可是明明我在Page_Load中写了Session["validateSn"] = valStr;这不是实例化吗?再说,只有第一次不可以,图形验证码也已经出现了。

解决方案 »

  1.   

     if (!string.IsNullOrEmpty(Session["validateSn"]"].ToString()))
    {if (validateStr == Session["validateSn"].ToString())}   试试
      

  2.   

    你第一次是先访问的
    if (validateStr == Session["validateSn"].ToString())这个先执行
    ,然后再去访问的~/ValidatePic.aspx
    所以就没有实例化咯
      

  3.   

    你确定第一次加载页面Session["validateSn"]传值成功了吗?你调试一下看看,如果没有你可以尝试给她赋个初始值看看
      

  4.   


    怪我没有说清楚。此验证是在一个Button1_Click中执行的。应该是先访问~/ValidatePic.aspx,再执行验证的。
      

  5.   

    如果这样,第一次值为null的时候,第一次的验证就不会执行。也就是用户至少要输入两次验证码。
      

  6.   

    看是不是网站配置filter,配置权限过滤器或者别的过滤器,在访问该验证码时,跳过权限过滤的验证。
      

  7.   

    我建议你安装到iis 上再试试
      

  8.   

    if(validateStr == Session["validateSn"])