我的绘制随机验证码图片的代码放在code.aspx中,然后页面有一个image,image.imageUrl="code.aspx"。
image旁边有一linkbutton,linkbutton.text="看不清,换一张"。image和linkbutton都在default.aspx中。我想点击这个linkbutton后,image就换为另一张随机的验证码。不刷新整个页面,只刷新验证码图片。怎么做?我不太懂javascript。
我用ajax里的scriptmanager和updatepanel两个控件为什么不行?
这是画图的代码code.aspx.cs:
 string chkCode = string.Empty; 
                 //颜色列表,用于验证码、噪线、噪点 
            Color[] color ={ Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue }; 
                 //字体列表,用于验证码 
            string[] font ={ "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Segoe Script" }; 
                 //验证码的字符集,去掉了一些容易混淆的字符 
            char[] character ={ '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };            Random rnd = new Random(); 
                //生成验证码字符串 
            for (int i = 0; i < 4; i++)
            {
                chkCode += character[rnd.Next(character.Length)]; 
            }
            Session["code"]=chkCode;
            Bitmap bmp = new Bitmap(100, 40); 
            Graphics g = Graphics.FromImage(bmp); 
            g.Clear(Color.White);             //画噪线 
            for (int i = 0; i < 10; i++) 
            {  
               int x1 = rnd.Next(100); 
               int y1 = rnd.Next(40); 
               int x2 = rnd.Next(100); 
               int y2 = rnd.Next(40); 
               Color clr = color[rnd.Next(color.Length)]; 
               g.DrawLine(new Pen(clr), x1, y1, x2, y2); 
            } 
            //画验证码字符串 
            for (int i = 0; i < chkCode.Length; i++) 
            { 
               string fnt = font[rnd.Next(font.Length)]; 
               Font ft = new Font(fnt, 18); 
               Color clr = color[rnd.Next(color.Length)]; 
               g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 + 8, (float)8); 
            } 
            //画噪点 
            for (int i = 0; i < 100; i++) 
            { 
               int x = rnd.Next(bmp.Width); 
               int y = rnd.Next(bmp.Height); 
               Color clr = color[rnd.Next(color.Length)]; 
               bmp.SetPixel(x, y, clr); 
            } 
            //清除该页输出缓存,设置该页无缓存 
               Response.Buffer = true; 
               Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); 
               Response.Expires = 0; 
               Response.CacheControl = "no-cache"; 
               Response.AppendHeader("Pragma", "No-Cache"); 
            //将验证码图片写入内存流,并将其以 "image/Png" 格式输出 
               MemoryStream ms = new MemoryStream(); 
            try 
            {  
               bmp.Save(ms, ImageFormat.Png); 
               Response.ClearContent(); 
               Response.ContentType = "image/Png"; 
               Response.BinaryWrite(ms.ToArray()); 
            } 
            finally 
            { 
              //显式释放资源  
               bmp.Dispose(); 
               g.Dispose(); 
            } UpdatePanel验证码

解决方案 »

  1.   

    这个和后台代码没关系,是前台调用的地方加个JS就可以了。
    蓝色部分是你code.aspx的路径,
    红色部分是Image的ID<script language="javascript" type="text/javascript">
        function changeCode() {
            var imgNode = document.getElementById("vimg");
            imgNode.src = "../admin/handler/WaterMark.ashx?t=" + (new Date()).valueOf();  // 这里加个时间的参数是为了防止浏览器缓存的问题   
        }  
    </script><img width="73px" src="../admin/handler/WaterMark.ashx" id="vimg" alt="验证码,点击刷新" onclick="changeCode()"/>
      

  2.   

    如果你要用边上放一个链接的形式刷新,可以这样写
    <a href="#" onclick="changeCode()">刷新验证码</a>
    <a onclick="changeCode()">刷新验证码</a>
      

  3.   

    Refer:
    http://www.cnblogs.com/insus/articles/1945539.html
      

  4.   

    好像就要上边<a href="#" onclick="changeCode()">刷新验证码</a>就可以?谢谢你了 !!!
      

  5.   

    好像就要上边<a href="#" onclick="changeCode()">刷新验证码</a>就可以?谢谢你了 !!!可行,防止缓存,最好在页面地址后面加个随机数
      

  6.   

    是的,上面的js代码也要加上。 js代码根据我给你的例子改下 验证码路径即可