1

私のフォームの 1 つにキャプチャがあります。

私の前にすでにたくさんのコードが書かれているので、私はこのキャプチャを使用せざるを得ません。

この方法は簡単です:

ファイルがありashxます。そのファイルを使用してイメージが作成されます。同時に、そのファイルはイメージから同じ値でセッションを作成します。

送信時に、コードはそれらが同じかどうかをチェックします。もしそうなら、続けてください。そうでない場合は、戻ります。

ページを更新すると、キャプチャが更新されます。

次に、要件として追加する必要がありajax update panelます。

その後、キャプチャは引き続き chrome と safari で正常に動作しますが、ページが IE と Firefox で再度読み込まれると更新されません。

キャプチャ専用の簡単なページを作成しました

aspx


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <img height="30" alt="" src="Handler.ashx" width="80"><br>
            <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
                onclick="btnSubmit_Click"/>
        </ContentTemplate>
    </asp:UpdatePanel>
    <div>

    </div>
    </form>
</body>
</html>


aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default7 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {

    }
}

handler.ashx 

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;

public class Handler : IHttpHandler,System.Web.SessionState.IRequiresSessionState {
    public void ProcessRequest(HttpContext context)
        {
            Bitmap objBMP = new System.Drawing.Bitmap(60, 20);
            Graphics objGraphics = System.Drawing.Graphics.FromImage(objBMP);
            //objGraphics.Clear(Color.Blue);

            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());
            }

            randomStr = GetRandomString();

            //This is to add the string to session cookie, to be compared later
            context.Session.Add("randomStr", randomStr);



            //' Write out the text
            objGraphics.DrawString(randomStr, objFont, Brushes.White, 3, 3);

            //' Set the content type and return the image
            context.Response.ContentType = "image/GIF";
            objBMP.Save(context.Response.OutputStream, ImageFormat.Gif);

            objFont.Dispose();
            objGraphics.Dispose();
            objBMP.Dispose();

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        private string GetRandomString()
        {
            string[] arrStr = "A,B,C,D,1,2,3,4,5,6,7,8,9,0".Split(",".ToCharArray());
            string strDraw = string.Empty;
            Random r = new Random();
            for (int i = 0; i < 5; i++)
            {
                strDraw += arrStr[r.Next(0, arrStr.Length - 1)];
            }
            return strDraw;
        }


}

何か案が?


今答えが出ました。

イメージ コントロールをサーバー コントロールに変更します。

コードビハインドで、画像ソースを現在の日時に変更します

<img height="30" alt="" src="/Handler.ashx" width="80" runat="server" id="imgCaptcha">

imgCaptcha.Src = "Handler.ashx?dt=" + DateTime.Now.ToString();

4

1 に答える 1

0

イメージ コントロールをサーバー コントロールに変更します。

コードビハインドで、画像ソースを現在の日時に変更します

<img height="30" alt="" src="/Handler.ashx" width="80" runat="server" id="imgCaptcha">

imgCaptcha.Src = "Handler.ashx?dt=" + DateTime.Now.ToString();
于 2012-08-15T07:07:25.407 に答える