سؤال

في صفحتي، يمكن للمستخدمين (أعضاء الموظفين الداخليين) كتابة قائمة مفصولة بفواصل لعناوين البريد الإلكتروني. ما أود القيام به هو في كل مرة تتم فيها كتابة فاصلة، يتحقق من أن عنوان البريد الإلكتروني الذي كتبه حديثا موجود في دفتر العناوين.

حاليا لدي دفتر العناوين المخزن كأرضي Hashtable ل O (1) أوقات البحث ولكن يمكنني بسهولة التبديل إلى بنية بيانات أخرى إذا تم التوصية به.

هل كانت مفيدة؟

المحلول

يمكنك أن تفعل ذلك مع جافا سكريبت و Ajax للتواصل مع جانب الخادم.

يمكنك القيام بالخطوات التالية:

  1. قم بإنشاء خدمة ويب تحصل على السلسلة من العميل (وهو البريد الإلكتروني الذي كتبه المستخدم)، والتحقق منه وإرجاع True / False.
  2. إضافة [scriptservice] السمة إلى فئة خدمة الويب.
  3. في الصفحة، أضف عنصر تحكم ScriptManager ASP.NET مع البرامج النصية / Scriptreence التي تشير إلى خدمة الويب من الخطوة 1.
  4. في الصفحة، أضف رمز JavaScript الساطن إلى حدث OnkeyDown من Textbox من رسائل البريد الإلكتروني
  5. في معالج الأحداث هذا، إذا أنواع المستخدم فاصلة، فقم بتنفيذ طلب خدمة ويب إلى الخادم بقيمة TextBox. عند الاستجابة (صحيح أو خطأ)، افعل ما تحتاجه معه.

يمكنك قراءة المزيد حول MSDN هنا و هناوبعد قد تجد أيضا مفيدا الإكمال التلقائي Ajax Extender..

نصائح أخرى

من أجل القيام به على KeyPress، سيكون هناك جافا سكريبت (أو VBScript جانب العميل إذا كنت تستخدم IE) المعنية. لا يمكن القيام بذلك بدونه إذا كنت تبحث عن القيام بذلك بناء على إدخال مفاعل.

إذا كنت تفعل ذلك عندما يترك المستخدم مربع النص، فيمكنك استخدام AutoPostBack ورمزه في C # على جانب الخادم - يجب أن أقول رغم ذلك، أعتقد أن هذا النهج قبيح. إن مطالبة عملية إعادة النشر المتزامنة للتحقق من صحة البيانات هي فرض ضخم على المستخدم في رأيي، وبالتالي يجب أن يكون حقا ملاذ أخير فقط أو إيقاف أثناء الحصول على برنامج نصي غير متزامن للقيام بالعمل. يمكنك أيضا القيام بذلك في وقت النشر (عندما يحاولون تقديم النموذج) والتحقق من صحةها وإعطاء المستخدم رسالة التحقق من الصحة إذا فشلت أي من العناوين، ولكن مرة أخرى، هذا متزامن ولا المستخدم لا الحصول على الاستفادة من ردود الفعل المبكرة.

أنا سيفعل هذا باستخدام خدمة Windows (أو استخدام خدمة مريحة) باستخدام مكالمة JavaScript (باستخدام كائن XMLHTPRequest). قم بربط حدث TextBox الخاص بك إلى طريقة JavaScript.

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

ثم قم بإعداد مكالمة جافا سكريبت - هذه هي الشجاعة لما يحدث:

(تنصل: هذا الرمز هو ليس الإنتاج جاهز، إنه مجرد مثال يجب أن يمنحك بعض الاتجاهات)

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

إذن ما تفعله هنا هو إعداد XMLHTPRECEST، مما يدفع البيانات إلى ذلك وإطلاق تشغيله إلى خدمة ويب.

سيحتاج تطبيق الويب ASP.NET الخاص بك إلى خدمة ويب مدمجة فيها من خلال صحة العنوان.

قد أحذر أيضا: ماذا لو كان هناك عنوان واحد فقط والمستخدم لا ضرب الفاصلة؟ يجب عليك نقل الشجاعة بطريقة CheckFut () إلى طريقة خاصة بها تقوم بتوزيع العناوين. يجب أن تحقق طريقة Keydown حقا فقط إذا تم دفع ""، ". بهذه الطريقة يمكنك استدعاء خدمة الويب للتحقق عند تفقد مربع النص التركيز أيضا. كما أود أن تقلق بشأن تعديل العناوين الموجودة دون ضرب المستخدم مرة أخرى. لذلك، أود أن أتساءل عن هذا النهج. أود أن أعتبر أنه بمجرد التحقق من صحة العنوان، يجب أن يكون لديك جافا سكريبت يسمح فقط بحذف هذا العنوان، ولا ينبغي أن يكون قابلة للتحرير ... مهما كان النهج الذي تتناوله، أنا فقط تحذر من أنك هناك بعض القضية فقط لهم باستخدام نهج الدخول "،".

عليك أن تفعل هذا مع جافا سكريبت. بعد كتابة الفاصلة، فقط يمكنك تمرير البريد الإلكتروني مرة أخرى إلى c # backend للتحقق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top