Je suis en train de mettre en œuvre cette Captcha et étant donné qu'il ne dispose pas d'option pour générer une nouvelle image que je suis en train de construire un et je fais ceci:Aspx chargé uniquement 1 fois
private Panel buildCaptchaElement(XmlNode node)
{
Panel p1 = new Panel();
Label l = new Label();
l.Text = node.ChildNodes[3].InnerText;
TextBox tb = new TextBox();
tb.ID = "Captcha_Tb";
System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();
img.ID = "Captcha_Img";
img.ImageUrl = this.ResolveUrl("Turing.aspx");
img.Width = new Unit(140, UnitType.Pixel);
img.Height = new Unit(70, UnitType.Pixel);
LinkButton linkB = new LinkButton();
linkB.ID = "Captcha_linkB";
linkB.Text = "Can't read? Generate a new image.";
linkB.Click += new EventHandler(linkB_Click);
p1.Controls.Add(new Literal() { Text = "<table><tr><td>" });
p1.Controls.Add(l);
p1.Controls.Add(new Literal() { Text = "<br/>" });
p1.Controls.Add(img);
p1.Controls.Add(new Literal() { Text = "<br/>" });
p1.Controls.Add(tb);
p1.Controls.Add(new Literal() { Text = "<br/>" });
p1.Controls.Add(linkB);
p1.Controls.Add(new Literal() { Text = "</td></tr></table>" });
return p1;
}
void linkB_Click(object sender, EventArgs e)
{
System.Web.UI.WebControls.Image img = FindControl("Captcha_Img") as System.Web.UI.WebControls.Image;
img.ImageUrl = "Turing.aspx";
}
Qu'est-ce qui se passe est que lorsque je tente de générer une nouvelle image, il ne fait pas la page_load de "Turing.aspx" aucune idée pourquoi?
Mise à jour: J'ajoute dynamiquement des éléments à une page, l'un d'eux est un captcha avec le code disponible dans ce lien Captcha, les seules modifications que j'ai faites a été la création d'éléments pour le captcha dynamiquement comme vous le voyez dans " private Panel buildCaptchaElement (noeud XmlNode) "et ajoutez un bouton de lien pour générer une nouvelle image.
Le code qui génère l'image est la suivante:
public class Turing1 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Bitmap objBMP =new System.Drawing.Bitmap(60,20);
Graphics objGraphics = System.Drawing.Graphics.FromImage(objBMP);
objGraphics.Clear(Color.Green);
objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
//' Configure font to use for text
Font objFont = new Font("Arial", 8, FontStyle.Bold);
string randomStr="";
int[] myIntArray = new int[5] ;
int x;
//That is to create the random # and add it to our string
Random autoRand = new Random();
for (x=0;x<5;x++)
{
myIntArray[x] = System.Convert.ToInt32 (autoRand.Next(0,9));
randomStr+= (myIntArray[x].ToString());
}
//This is to add the string to session cookie, to be compared later
Session.Add("randomStr",randomStr);
//' Write out the text
objGraphics.DrawString(randomStr, objFont, Brushes.White, 3, 3);
//' Set the content type and return the image
Response.ContentType = "image/GIF";
objBMP.Save(Response.OutputStream, ImageFormat.Gif);
objFont.Dispose();
objGraphics.Dispose();
objBMP.Dispose();
}
}
Une autre suggestion: Vous devez transformer votre code captcha en un contrôle utilisateur. –
Vous devez également utiliser les instructions "using" au lieu d'appeler explicitement Dispose(). –
Pourriez-vous également publier l'en-tête de votre page .aspx? –