验证码刷新问题
本文关键字:新问题 刷新 验证 | 更新日期: 2023-09-27 18:07:54
嗨,我有我的验证码问题,它不想刷新时,用户得到的代码错误。
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.IO;
public partial class CAPTCHA_Contact : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//ImageVerification
if (!IsPostBack)
{
SetVerificationText();
}
}
public void SetVerificationText()
{
Random ran = new Random();
int no = ran.Next();
Session["Captcha"] = no.ToString();
}
protected void CAPTCHAValidate(object source, ServerValidateEventArgs args)
{
if (Session["Captcha"] != null)
{
if (txtVerify.Text != Session["Captcha"].ToString())
{
SetVerificationText();
args.IsValid = false;
return;
}
}
else
{
SetVerificationText();
args.IsValid = false;
return;
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
{
return;
}
SetVerificationText();
//Save the content
MailMessage mail = new MailMessage();
mail.From = new MailAddress(EmailTB.Text);
mail.To.Add("test@hotmail.co.uk");
mail.CC.Add("another_test@hotmail.co.uk");
mail.Subject = "Web Quote";
mail.IsBodyHtml = true;
mail.Body = "First Name: " + FNameTB.Text + "<br />";
mail.Body += "Email: " + EmailTB.Text + "<br />";
mail.Body += "Telephone: " + TelephoneTB.Text + "<br />";
mail.Body += "Query: " + QueryDD.Text + "<br />";
mail.Body += "Comments: " + CommentsTB.Text + "<br />";
SmtpClient smtp = new SmtpClient();
smtp.Host = "localhost";
smtp.Send(mail);
sucessPH.Visible = true;
}
protected void Reset(object s, EventArgs e)
{
FNameTB.Text = "";
QueryDD.Text = "";
EmailTB.Text = "";
TelephoneTB.Text = "";
CommentsTB.Text = "";
}
}
ASPX:
<asp:PlaceHolder ID="formPH" runat="server" Visible="true">
<form id="form1" runat="server">
<table id="contact" cellspacing="7">
<tr>
<td class="label"></td>
<td><asp:TextBox ID="FNameTB" runat="server" width="350px" title="Your Name" />
<asp:RequiredFieldValidator ID="rfvFName" runat="server" ControlToValidate="FNameTB" ErrorMessage="First Name is required" Display="Dynamic" />
</td>
</tr>
<tr>
<td class="label"></td>
<td><asp:TextBox ID="EmailTB" runat="server" width="350px" title="Your Email" />
<asp:RequiredFieldValidator ID="rfvEmail" runat="server" ControlToValidate="EmailTB" ErrorMessage="Email is required" Display="Dynamic" />
</td>
</tr>
<tr>
<td class="label"></td>
<td><asp:TextBox ID="TelephoneTB" runat="server" width="350px" title="Your Telephone Number" />
<asp:RequiredFieldValidator ID="rfvTelephone" runat="server" ControlToValidate="TelephoneTB" ErrorMessage="Telephone number is required" Display="Dynamic" />
</td>
</tr>
<tr>
<td class="label"></td>
<td><asp:DropDownList ID="QueryDD" runat="server" width="355px" CssClass="QueryDD">
<asp:ListItem Selected="True" style="color: #999999">Select a Service</asp:ListItem>
<asp:ListItem>test</asp:ListItem>
<asp:ListItem>Cleaning</asp:ListItem>
<asp:ListItem>test</asp:ListItem>
<asp:ListItem>Bar</asp:ListItem>
<asp:ListItem>Cleaning</asp:ListItem>
<asp:ListItem>Cleaning</asp:ListItem>
<asp:ListItem>Wash Cleaning</asp:ListItem>
<asp:ListItem>Cleaning</asp:ListItem>
<asp:ListItem>Supplies</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvLName" runat="server" ControlToValidate="QueryDD" ErrorMessage="Query is required" Display="Dynamic" />
</td>
</tr>
<tr>
<tr>
<td class="label"></td>
<td><asp:TextBox ID="CommentsTB" title="Comments" runat="server" TextMode="MultiLine" width="350px" />
<asp:RequiredFieldValidator ID="rfvComments" runat="server" ControlToValidate="CommentsTB" ErrorMessage="Comments are required" Display="Dynamic" />
</td>
</tr>
<tr>
<td></td>
<td><asp:Label ID="lblCaptchaCode" runat="server" Text=""></asp:Label><asp:Image ID="imCaptcha" ImageUrl="captcha.ashx" runat="server" width="120px" /> <asp:Button ID="btnNewCode" runat=server Text="GENERATE"></asp:Button></td>
</tr>
<tr>
<td class="label"></td>
<td><asp:TextBox ID="txtVerify" runat="server" width="350px" title="Enter the above code here"> </asp:TextBox>
<asp:RequiredFieldValidator ID="rfvCaptcha" runat="server" ControlToValidate="txtVerify" ErrorMessage="Required" Display="Dynamic" />
</td>
</tr>
<tr>
<td></td>
<td class = "buttons" colspan="2"><asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSave_Click"/><asp:Button ID="btnReset" runat="server" Text="Reset" OnClick="Reset"/></td>
</tr>
<tr>
<td></td>
<td><asp:PlaceHolder ID="sucessPH" runat="server" Visible="false"><p class="submission">Thank you for your submission.</p></asp:PlaceHolder></td>
</tr>
<tr>
<td></td>
<td><asp:CustomValidator ID="CustomValidator2" runat="server" ControlToValidate="txtVerify" ErrorMessage="Wrong verification code, please refresh the page"
OnServerValidate="CAPTCHAValidate"></asp:CustomValidator></td>
</tr>
</table>
</form>
</asp:PlaceHolder>
我需要能够在标签中存储验证码,并创建一个按钮,重新加载验证码..
任何想法?
我已经走了这么远,只是需要一些帮助。编辑:添加aspx代码似乎您有缓存问题。浏览器不知道图像已更改,因此使用较早存储的版本。
如果您不想完全禁用缓存,您可以通过向映像路径添加一个虚拟值(例如当前时间戳)来规避此行为。浏览器将每次重新加载图像,因为它有一个新的url。
http://localhost/captcha.ashx?d=1315497031
EDIT:要做到这一点,只需在Page_Load:
中添加这一行imCaptcha.ImageUrl = "captcha.ashx?d=" + DateTime.Now.Ticks;