Поймать нажатие клавиш в текстовом поле ASP.NET - PullRequest
3 голосов
/ 28 августа 2009

Есть ли простой способ захватить нажатие клавиши (в моем случае: F5) в текстовом поле ASP.NET и выполнить метод сервера в качестве ответа?

Я создал простой интерфейс SQL и по привычке (из SQL Server Mgmt Studio) продолжаю нажимать клавишу F5, когда заканчиваю вводить запрос, но это всегда обновляет браузер, а не выполняет запрос SQL : -)

Могу ли я сделать это в ASP.NET, используя, возможно, какой-нибудь Javascript или jQuery?

Марк

UPDATE:

У меня есть этот код jQuery на моей странице ASP.NET:

 $(document).ready(function() {
    $("#<%= txtQuery.ClientID %>").keydown( function (e) {
        if (e.keycode == 116) {
           $("#<%= btnExecute.ClientID %>").trigger('click');
        }
    });
 });

Я пробовал различные комбинации "e.which", "e.keycode" и различных значений для кода ключа - но ни одна из них, похоже, не работает. Я использую MS IE 7 на моей машине разработчика. txtQuery - это текстовое поле ASP.NET, в котором я набираю свой запрос, а btnExecute - кнопка ASP.NET, которая отправит этот запрос на SQL Server для выполнения.

Есть идеи? Нужно ли как-то подавлять стандартную обработку событий? И если да, то как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 28 августа 2009

Если вы хотите выполнить клиентский вызов на стороне сервера, вам нужно будет использовать некоторый JavaScript, чтобы инициировать обратную передачу, или выполнить AJAX-вызов вашего приложения.

Прежде всего, вам нужно обрабатывать нажатия клавиш. jQuery предоставляет удобный keypress метод для захвата нажатий клавиш на элементе:

$("#mytextbox").keypress(function(e){
    // Use e.which, etc to find out which key was pressed.
});

К сожалению, функциональные клавиши (F1-F12) нуждаются в особой обработке в определенных браузерах, где они не генерируют события keypress. Чтобы надежно фиксировать функциональные клавиши во всех современных браузерах, вам нужно использовать события keydown и keyup. Я предлагаю вам прочитать эту статью , чтобы понять, как интерпретировать ключевые события в поддерживаемых вами браузерах.

Далее вам нужно создать веб-метод ASP.NET. Способ сделать это - создать на вашей странице открытый статический метод (или отдельную страницу, если хотите), а затем украсить его атрибутом WebMethodAttribute:

[WebMethod]
public static string MyMethod(int foo, int bar, string bob)
{
    return "Welcome to The World of Tomorrow!";
}

Наконец, вы можете использовать jQuery для вызова этого метода и сделать что-то с ответом:

var request = $.ajax({
    type: "POST",
    url: "MyPage.aspx/MyWebMethod",
    data: "{ foo:22, bar:19, bob:'A string' }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        var response = null;

        if (typeof (msg.d) != 'undefined')
            response = msg.d;

        if (response == null)
            Error('Message returned by ASP.NET AJAX call is not in the expected format.');

        alert(response);
        },
    error: function(request, textStatus, errorThrown) {

        if (console && typeof console.log != "undefined") {

            try {
                var result = eval("(" + request.responseText + ")");

                if (result && typeof result.Message != "undefined")
                    console.log(result.ExceptionType + ": " + result.Message + "\n" + result.StackTrace);
            }
            catch (ex) {
                console.log(request.responseText);
            }
        }
    }
});

При успешном вызове в этом небольшом фрагменте кода отобразится предупреждение «Добро пожаловать в мир завтра!», Переданное браузеру в ответ на метод ASP.NET.

Краткий ответ: то, что вы спрашиваете, вполне возможно, однако это не так просто, как вы можете себе представить. Проблемы с обнаружением нажатий клавиш могут быть особенно хлопотными. Удачи!

2 голосов
/ 28 августа 2009

См. нажатие клавиши (fn)

$("#yourtextboxId").keypress( function (e) {
   // do stuff here
});

и

e.which

будет идентифицировать нажатую клавишу, и я думаю, что код клавиши для F5 116

Для запуска события вы можете использовать

триггер метод

$("#yourexecutescriptbutton").trigger('click');

Edit:

Если вам нужно перехватить F5, укажите обработчик события keydown

$("#yourtextboxId").keydown( function (e) {
        if ( e.which === 116 )
        {
            $("#yourexecutescriptbutton").trigger('click');  
        }
    });
1 голос
/ 28 августа 2009

Чтобы подавить поведение события по умолчанию, вы должны остановить его всплывание до более высоких элементов. Для этого просто верните false из вашего обработчика событий:

$("#yourtextboxId").keydown( function (e) {
    if ( e.which === 116 )
    {
        $("#yourexecutescriptbutton").trigger('click');
        return false; // Stops keydown event being bubbled.  
    }
});

К сожалению, в зависимости от того, как браузер интерпретирует функциональные клавиши, может потребоваться предотвращение событий keydown и keyup для этой конкретной клавиши в дополнение к описанному здесь поведению.

0 голосов
/ 29 августа 2013

Вы просто получаете идентификатор клиента текстового поля ASP.NET в jquery. Затем вызовите ajax через jquery, как показано ниже.

var aspTextBox = $("#<%=Me.TextBox1.ClientId%>");
aspTextBox.keypress(function(e){
//Code for $.ajax request
    if(e.which==13){
    $.ajax({
    type:"POST",
    url:"WebService.asmx/GetData",
    contentType:"application/json;charset=utf-8",
    dataType:"json",
    data:"{}",
    success:function(data){
        },
    error:function(a,b,c){
        },
    });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...