Проверяйте электронные письма по мере их ввода

StackOverflow https://stackoverflow.com/questions/1881162

  •  18-09-2019
  •  | 
  •  

Вопрос

На моей странице пользователи (внутренние сотрудники) могут ввести список адресов электронной почты, разделенный запятыми.Что я хотел бы сделать, так это каждый раз, когда вводится запятая, он проверяет, находится ли вновь написанный адрес электронной почты в адресной книге.

В настоящее время у меня есть адресная книга, хранящаяся в виде хеш-таблицы для времени поиска O (1), но я могу легко переключиться на другую структуру данных, если это рекомендуется.

Это было полезно?

Решение

Вы можете сделать это с помощью JavaScript и AJAX для взаимодействия с серверной частью.

Вы можете сделать следующие шаги:

  1. Создайте веб-сервис, который получает строку от клиента (то есть адрес электронной почты, введенный пользователем), проверяет ее и возвращает true/false.
  2. Добавить атрибут [Scriptservice] в класс веб -службы.
  3. На странице добавьте управление ScriptManager ASP.NET с помощью Scripts/Scriptreference, который указывает на веб -службу с шага 1.
  4. На странице добавьте код JavaScript, который перехватывает событие onkeydown текстового поля электронной почты.
  5. В этом обработчике событий, если пользователь вводит запятую, выполняется запрос веб-службы на сервер со значением текстового поля.Когда ответ (истинный или ложный) будет получен, делайте с ним все, что вам нужно.

Вы можете прочитать больше на MSDN здесь и здесь.Вам также может оказаться полезным Расширение автозаполнения AJAX.

Другие советы

Чтобы это можно было сделать при нажатии клавиши, необходимо использовать JavaScript (или vbscript на стороне клиента, если вы используете IE).Без него этого сделать невозможно, если вы хотите сделать это на основе ввода с клавиатуры.

Если бы вы должны были сделать это, когда пользователь покидает это текстовое поле, вы могли бы использовать AutoPostback и закодировать его на C# на стороне сервера — хотя я должен сказать, что считаю этот подход уродливым.По моему мнению, требование синхронной обратной передачи для проверки данных — это огромная нагрузка для пользователя, и поэтому на самом деле это должно быть только последним средством или временным решением, пока вы получаете асинхронный скрипт для выполнения работы.Вы также можете сделать это во время публикации (когда они пытаются отправить форму), проверить их и вернуть пользователю сообщение проверки, если какой-либо из адресов не работает, но, опять же, это синхронно, и пользователь этого не делает. получить выгоду от ранней обратной связи.

я сделал бы это, используя либо службу Windows (или службу RESTful), используя вызов javascript (используя объект XmlHttpRequest).Привяжите событие нажатия клавиши вашего текстового поля к методу 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, помещаете в него данные и отправляете их веб-сервису.

Вашему веб-приложению ASP.NET потребуется встроенный в него веб-сервис, который будет выполнять проверку адреса.

Еще могу предупредить:Что, если есть только один адрес и пользователь не делает попал в запятую?Вам следует перенести внутренности метода CheckInput() в его собственный метод, который анализирует адреса.Метод KeyDown действительно должен проверять только то, был ли нажат «,».Таким образом, вы можете вызвать веб-сервис, чтобы проверить, когда текстовое поле также теряет фокус.Я бы также беспокоился об изменении существующих адресов без повторного нажатия пользователем запятой.Поэтому мне хотелось бы задаться вопросом об этом подходе.Я бы посчитал, что после проверки адреса у вас должен быть javascript, который позволяет только удалять этот адрес, но его нельзя редактировать...какой бы подход вы ни выбрали, я просто предупреждаю вас, что есть некоторая проблема с простой проверкой их с использованием введенного подхода «,».

Вы должны сделать это с помощью Javascript.Только после ввода запятой вы сможете передать электронное письмо обратно в серверную часть C# для проверки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top