Динамический поиск в базе данных и показ результатов с использованием Javascript и C # - PullRequest
2 голосов
/ 10 января 2012

Я хочу найти в базе данных clientName и динамически показывать результаты, пока пользователь печатает, чтобы они могли выбрать пользователя.Теперь я понимаю, что этого нельзя сделать без использования javascript.

Так что, если пользователь печатает «Al», то в раскрывающемся списке будут отображаться результаты клиентов под названием «Allan, Alison, Ali ...» и т. Д.как дисплей под ним.В данный момент пользователь вводит имя Клиента в текстовое поле.

Я знаю, что создание DropDownList должно быть сделано примерно так:

private void InitializeNameDropDown(DataTable dtTable)
{
    string ClientName = Clienttb.Text;
    MySqlDataReader Reader = MySQLQuery(ClientName);
    int nTotalRecords = dtTable.Rows.Count;
    for (int i = 0; i < nTotalRecords; i++)
    {
        NameDropDown.Items.Add(dtTable.Rows[i]["Client"].ToString());
    }
}

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

Любая помощь будет оценена, спасибо заранее.

Ответы [ 4 ]

1 голос
/ 10 января 2012

Вы можете сделать это без JS, повесить событие при изменении текста в TextBox (OnTextChanged) и там обновить DDL (не забудьте установить AutoPostBack = true).Но он может легко заставить пользователя ждать («заморозить страницу») или даже откатить то, что он написал, если вы используете Ajax.NET

. Я настоятельно рекомендую использовать JS, а не это (используйте JS и WCF / ashx / регулярноWS, любой из них будет делать) из-за увеличения производительности и гораздо лучших возможностей настройки.ASP в любом случае генерирует загрузку JS для «элементов управления ASP».

Это может быть применено, например, http://www.codeproject.com/KB/aspnet/Cross_Domain_Call.aspx

1 голос
/ 10 января 2012

Вам нужно подключиться к событию keyup в текстовом поле и запустить XmlHttpRequest из этого события - если вы используете jQuery, это довольно просто:

$('#mytextbox').keyup(function() { $.ajax(blah blah) });

В качестве альтернативы, как говорит Деннис, просто используйте плагин автозаполнения - он очень прост и работает хорошо.

0 голосов
/ 10 января 2012

Вот код, который может помочь вам.

Используется библиотека jquery Javascript. Предполагается, что вы получаете полный HTML-код списка результатов, который вы хотите отобразить пользователю. Вам понадобится больше Javascript для динамического отображения / скрытия поля со списком. Вам также понадобится серверный скрипт, который получает набор результатов поиска на основе некоторого поискового текста. Этот сценарий должен находиться по URL-адресу, определенному в теге # searchPartialUrl (который можно скрыть). Текст для поиска должен быть введен с именем # searchText .

Мне нравится этот метод, потому что вы можете хранить свой код JS в отдельном файле и использовать его повторно. Вашему серверу просто нужно создать представления HTML, которые содержат всю информацию о целевых асинхронных данных в обычных тегах HTML.

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

// This function is used to delay the async request of search results
// so we're not constantly sending requests.
var mydelay = (function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout(timer);
        timer = setTimeout(callback, ms);
    };
})();

var asyncSearchForm = function(onSuccess) {

    var keyupWrapper = function(keyCode) {

        // if this key was an arrow key, then
        // ignore the press
        for (var i = 37; i <= 40; i++)
            if (keyCode == i)
            return;

        // get all the search info from the form
        var searchText = $('#searchText').val();
        var searchPartialUrl = $('#searchPartialUrl').val();

        // make the ajax call
        $.ajax({
            type: "POST",
            url: searchPartialUrl,
            data: {
                searchText: searchText
            },
            dataType: "html",

            // on success, the entire results content should be replaced
            // by the results returned
            success: function(data, textStatus, jqXHR) {
                $('#searchResults').html(data);
                onSuccess();
            },

            // on error, replace the results with an error message
            error: function(jqXHR, textStatus, errorThrown) {
                $('#searchResults').html('<p>An error occurred while getting the search results.</p>');
            }
        });
    };

    onSuccess = (typeof (onSuccess) == 'undefined') ? function() { } : onSuccess;

    // On each key-up event, we'll search for the given input. This event
    // will only get triggered according to the delay given, so it isn't
    // called constantly (which wouldn't be a good idea).
    $('#searchText').keyup(function(e) {

        // delay between each event
        mydelay(function() {

            // call key up
            keyupWrapper(e.keyCode);

        }, 500);
    });
}

Обновление:

Вы сказали, что используете C #. Если вы используете MVC, вам нужно действие в вашем контроллере, чтобы стать целью для вашего асинхронного запроса. Вот пример:

[HttpPost]
public ActionResult GetSearchResults(string searchText)
{
    // Here, you should query your database for results based
    // on the given search text. Then, you can create a view
    // using those results and send it back to the client.
    var model = GetSearchResultsModel(searchText);

    return View(model);
}
0 голосов
/ 10 января 2012

Что касается клиентской стороны, попробуйте jquery и jqueryui autocomplete, это всего лишь предложение, jquery имеет хороший вызов ajax, и его очень просто использовать, а для jcomeryui вы просто передаете ему ключевые слова, и он создаст правильный списокпод полем ввода.

http://jquery.com/

http://jqueryui.com/

http://api.jquery.com/jQuery.ajax/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...