验证码生成类引用后出现 "未将对象引用设置到对象的实例" 如何把生成的验证码存入Session??????

cuiweijinqi 2006-11-01 10:37:08
我在学习应用"asp.net验证码生成类(参考)"地址如下:http://www.cg163.net/ithtm/id.aspid=21360.htm
想把CreateValidateNumber(4)生成的验证码存入Session["test"],但在读取时出现“未将对象引用设置到对象的实例”的错误,分析应该是在Page load时把Session["test"]清空了,如何改?请大家帮忙。
图像生成页:validSession.aspx代码如下:
protected void Page_Load(object sender, EventArgs e)
{
Function.ValidateNumber validCode = new Function.ValidateNumber();
string aaa =validCode.CreateValidateNumber(4);
Session["test"] = aaa;
validCode.CreateValidateGraphic(this, aaa);
}
引用页代码如下:
Label1.Text = Session["test"].ToString();
...全文
686 25 打赏 收藏 举报
写回复
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
应该是的(我感觉),同时也谢谢你哟。就象我们在一个空页里直接引用一个未赋值的Session["...."]一样。
liujia_0421 2006-11-01
  • 打赏
  • 举报
回复
To:引用页代码如下:
Label1.Text = Session["test"].ToString();

你的意思是说,在引用的时候,Session["test"]就变成空了对吧?
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
但在测试页页面里(添加一个Image,URL指向这个图象生成页面)就出错了。
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
在图像生成页里,这样能看到两组相同的四位的生成数字。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Function.ValidateNumber validCode = new Function.ValidateNumber();
string aaa = validCode.CreateValidateNumber(4);
Session["test"] = aaa;
Response.write(Session["test"]);
Response.Write(aaa);
//validCode.CreateValidateGraphic(this, aaa);
}
}
liujia_0421 2006-11-01
  • 打赏
  • 举报
回复
没太明白,能不能将这页的代码发出来看下...
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
不可能,如果aaa是空的,就无法产生四位的验证码了。
周公 2006-11-01
  • 打赏
  • 举报
回复
if(!ispostback)
{
Function.ValidateNumber validCode = new Function.ValidateNumber();
string aaa =validCode.CreateValidateNumber(4);
Session["test"] = aaa;
validCode.CreateValidateGraphic(this, aaa);

}

这样没错,如果还是出现上述情况就是因为string aaa =validCode.CreateValidateNumber(4);这个方法aaa是null。
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
不行的,加一个判断显示出了验证码,但Session["test"]是空的,什么也没有。
happyamei 2006-11-01
  • 打赏
  • 举报
回复
顶上

楼上应该可以,不过加上下面的话就更好了

Label1.Text = Session["test"]==null?"":Session["test"].ToString();

这样他就肯定不会错了
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
还是不行。我分析是在两次调用Page Load事件时把Session["test"]给清除了吧?
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
好的,谢!
liujia_0421 2006-11-01
  • 打赏
  • 举报
回复
if(!ispostback)
{
Function.ValidateNumber validCode = new Function.ValidateNumber();
string aaa =validCode.CreateValidateNumber(4);
Session["test"] = aaa;
validCode.CreateValidateGraphic(this, aaa);

}

试试看...
hegang888888888 2006-11-01
  • 打赏
  • 举报
回复
不懂,学学
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
终于明白了,感谢大家的帮助!
liwei81888 2006-11-01
  • 打赏
  • 举报
回复
...........
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
说得对,想明白了,应该是在调用页里面,Session还没赋值,所以是空的,但我想用这个类来实现验证码(Session验证),该如何处理?请指教。谢。
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
没听懂。
wapit 2006-11-01
  • 打赏
  • 举报
回复
是先出调用页,再出图片页,Session当然是空的。

你应该搞个页面显示图片之后,再调用Session["test"]
cuiweijinqi 2006-11-01
  • 打赏
  • 举报
回复
在调用图片页面里,Session["test"]肯定是空了,否则不会出错的,我想请教大家如何把调用类的页面里的Session["test"]传给调用图片的页面。谢。

xray2005 2006-11-01
  • 打赏
  • 举报
回复

在产生图片的页面修改为:
if(!IsPostBack)
{
  Function.ValidateNumber validCode = new Function.ValidateNumber();
string aaa =validCode.CreateValidateNumber(4);
Session["test"] = aaa;
validCode.CreateValidateGraphic(this, aaa);

}

在调用验证码图片的页面里加入判断:
if(Session["test"].ToString()!=""||Session["test"].ToString()!=string.Empty)
{
//比较验证码输入是否正确
}
加载更多回复(5)
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2006-11-01 10:37
社区公告

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

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