是否有一种简单的方法可以在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。
有什么想法吗?我是否需要以某种方式抑制标准事件处理?如果是这样的话,那么我该如何实现呢?
答案 0 :(得分:3)
如果您想从客户端进行服务器端调用,您需要使用一些javascript来启动回发,或者对您的应用程序执行AJAX调用。
首先,您需要处理按键操作。 jQuery提供了方便的keypress
方法来捕获元素上的按键:
$("#mytextbox").keypress(function(e){
// Use e.which, etc to find out which key was pressed.
});
不幸的是,功能键(F1-F12)在某些浏览器中需要特殊处理,因为它们不会生成keypress
个事件。要在所有现代浏览器中可靠地捕获功能键,您必须查看使用keydown
和keyup
事件。我建议您阅读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)
$("#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.
}
});
不幸的是,根据浏览器解释功能键的方式,除了此处的行为外,还可能需要阻止为该特定键引发keydown
和keyup
个事件。
答案 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){
},
});
}
});