在ASP.NET文本框中捕获按键

时间:2009-08-28 09:58:32

标签: asp.net jquery keyboard

是否有一种简单的方法可以在ASP.NET文本框中捕获按键(在我的情况下:F5),并将服务器方法作为响应执行?

我已经创建了一个简单的SQL前端,并且出于习惯(来自SQL Server Mgmt Studio),我在输入查询时一直按F5,但这总是刷新浏览器,而不是执行我的SQL查询: - )

我可以使用一些Javascript或jQuery在ASP.NET中执行此操作吗?

马克

更新:

我的ASP.NET页面上有这个jQuery代码:

 $(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 个答案:

答案 0 :(得分:3)

如果您想从客户端进行服务器端调用,您需要使用一些javascript来启动回发,或者对您的应用程序执行AJAX调用。

首先,您需要处理按键操作。 jQuery提供了方便的keypress方法来捕获元素上的按键:

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

不幸的是,功能键(F1-F12)在某些浏览器中需要特殊处理,因为它们不会生成keypress个事件。要在所有现代浏览器中可靠地捕获功能键,您必须查看使用keydownkeyup事件。我建议您阅读this article以了解如何解释您支持的浏览器中的关键事件。

接下来,您需要创建一个ASP.NET Web方法。这样做的方法是在页面上创建一个公共静态方法(如果你愿意,可以在一个单独的页面上创建),然后使用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方法的响应传递给浏览器。

简短的回答是你所要求的完全是可能的,但它并不像你想象的那么简单。检测按键的麻烦可能特别麻烦。祝你好运!

答案 1 :(得分:2)

请参阅keypress( fn )

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

e.which

将识别按下的键,我认为F5的键码是 116

要触发事件,您可以使用

trigger方法

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

修改

如果你需要捕获F5,那么给一个keydown事件处理程序

$("#yourtextboxId").keydown( function (e) {
        if ( e.which === 116 )
        {
            $("#yourexecutescriptbutton").trigger('click');  
        }
    });

答案 2 :(得分:1)

要抑制事件的默认行为,您必须阻止它冒泡到更高的元素。要执行此操作,只需从事件处理程序返回false

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

不幸的是,根据浏览器解释功能键的方式,除了此处的行为外,还可能需要阻止为该特定键引发keydownkeyup个事件。

答案 3 :(得分:0)

您只需在jquery中获取ASP.NET文本框的客户端ID。 然后通过jquery调用ajax,如下所示。

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){
        },
    });
    }
});