0

マイ ページでは、ユーザー (内部スタッフ メンバー) は電子メール アドレスのカンマ区切りのリストを入力できます。私がやりたいことは、カンマが入力されるたびに、新しく書かれた電子メールアドレスがアドレス帳にあることを確認することです.

現在、アドレス帳を O(1) 検索時間のハッシュテーブルとして保存していますが、推奨される場合は別のデータ構造に簡単に切り替えることができます。

4

3 に答える 3

5

JavaScript と AJAX を使用して、サーバー側と通信することができます。

次の手順を実行できます。

  1. クライアントから文字列 (ユーザーが入力した電子メール) を取得し、チェックして true/false を返す Web サービスを作成します。
  2. [ScriptService] 属性を Web サービス クラスに追加します。
  3. このページで、手順 1 の Web サービスを指す Scripts/ScriptReference を持つ ASP.NET ScriptManager コントロールを追加します。
  4. ページで、電子メール テキストボックスの onkeydown イベントにフックする JavaScript コードを追加します。
  5. このイベント ハンドラーで、ユーザーがコンマを入力すると、テキスト ボックスの値を使用してサーバーへの Web サービス要求を実行します。応答 (true または false) を受信したら、必要なことを行います。

詳細については、MSDN のこちらこちらをご覧ください。また、 AutoComplete AJAX エクステンダーも役立つ場合があります。

于 2009-12-10T14:10:57.480 に答える
3

キーを押して実行するには、javascript (IE を使用している場合はクライアント側の vbscript) が必要です。キー入力に基づいて実行しようとしている場合、これなしでは実行できません。

ユーザーがそのテキスト ボックスを離れたときにそれを行う場合は、AutoPostback を使用して、サーバー側で C# でコーディングできます。ただし、そのアプローチは見苦しいと思います。私の意見では、データを検証するために同期ポストバックを要求することは、ユーザーにとって大きな負担となるため、非同期スクリプトを使用して作業を行っている間の最後の手段または応急処置としてのみ使用する必要があります。投稿時 (フォームを送信しようとしているとき) に実行して検証し、いずれかのアドレスが失敗した場合は検証メッセージをユーザーに返すこともできますが、これも同期であり、ユーザーはそうしません。早い段階でフィードバックを得ることができます。

これは、JavaScript 呼び出し (XmlHttpRequest オブジェクトを使用) を使用して、Windows サービス (ま​​たは RESTful サービスを使用) を使用して行います。テキストボックスの keydown イベントを JavaScript メソッドにバインドします。

<input type="text" onKeyDown="javascript:CheckInput(this)" />

次に、javascript 呼び出しを設定します。これが、何が起こっているかの根幹です。

(免責事項:このコードは本番環境に対応していません。方向性を示すための単なる例です)

var req;

function CheckInput()
{
    if (window.event) keycode = window.event.keyCode;
    if (keycode == 188) //KeyCode 188 = Comma;
    {

        //I haven't provided code for this, you will need to code
        //the extraction of the address you wish to test for yourself...
        var addressToCheck = ParseLastAddressFromTextBox(); 

        req = new XMLHttpRequest();
        //Replace <SERVICEADDRESS> with the URL of your web service
        //the 'true' parameter specifies that the call should be asynchronous
        req.open("POST", "<SERVICEADDRESS>", true);
        req.onreadystatechange = MatchSearchComplete; //This is the callback method
        //Set up the post headers
        req.setRequestHeader("Host", "localhost");
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        var params = addressToCheck;
        req.setRequestHeader("Content-Length", params.length);
        //Iitiate the call to the service
        req.send(params);        }
}

//The XMLHttpRequest object will fire this method when the
//onreadystatechange event fires...
function MatchSearchComplete()
{
    //Check that the response has the correct state and status
    //indicating that we've received a response from the server.
    if (req.readyState == 4 && req.status == 200)
    {
        //Our call to the service is complete
        var result = req.responseText;
        if (result == "false")
            alert('The address "'+ req.params +'" is not valid.);
    }
}

つまり、ここで行っているのは、XMLHttpRequest を設定し、そこにデータをプッシュして、Web サービスに送信することです。

ASP.NET Web アプリケーションには、アドレスの検証を行う Web サービスが組み込まれている必要があります。

また、警告するかもしれません: アドレスが 1 つしかなく、ユーザーがコンマを打たなかった場合はどうなるでしょうか? CheckInput() メソッドの中身を、アドレスを解析する独自のメソッドに移動する必要があります。KeyDown メソッドは、実際には「,」が押されたかどうかのみをチェックする必要があります。このようにして、Web サービスを呼び出して、テキスト ボックスがいつフォーカスを失ったかを確認することもできます。また、ユーザーがコンマを再度押すことなく既存のアドレスを変更することについても心配します。したがって、私はこのアプローチについて疑問に思います。アドレスが検証されたら、そのアドレスの削除のみを許可する JavaScript を使用する必要があると考えます。編集可能であってはなりません。入力された「、」アプローチを使用してそれらを。

于 2009-12-10T14:35:04.717 に答える
0

これを Javascript で行う必要があります。コンマが入力された後、確認のためにメールを C# バックエンドに戻すことができます。

于 2009-12-10T14:12:06.920 に答える