2010-06-08 52 views
3

我有一个很大的应用程序,我打算为它启用快捷键。我会找到2个适用于我的JQuery插件(demo plug-in 1 - Demo plug-in 2)。你可以找到他们两个in this post in StackOverFlow如何使用jQuery触发服务器端方法

我的应用程序是一个完整的,我想增加一些功能,所以我不想再towrite代码。

所以作为一个快捷方式只是捕捉一个关键组合,我不知道如何调用快捷键应该触发的服务器方法?

那么如何通过调用我之前编写的方法来使用这些插件中的任何一个? 其实如何使用jquery引发服务器方法?

您还可以找到一个很好的文章here, by Dave Ward


更新:这里的情景。当用户按下CTRL +德尔GridView1_OnDeleteCommand所以我有这个

protected void grdDocumentRows_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) 
{ 
    try 
    { 
     DeleteRow(grdDocumentRows.DataKeys[e.Item.ItemIndex].ToString()); 
     clearControls(); 
     cmdSaveTrans.Text = Hajloo.Portal.Common.Constants.Accounting.Documents.InsertClickText; 
     btnDelete.Visible = false; 
     grdDocumentRows.EditItemIndex = -1; 
     BindGrid(); 
    } 
    catch (Exception ex) 
    { 
     Page.AddMessage(GetLocalResourceObject("AProblemAccuredTryAgain").ToString(), MessageControl.TypeEnum.Error); 
    } 
} 

private void BindGrid() 
{ 
    RefreshPage(); 
    grdDocumentRows.DataSource = ((DataSet)Session[Hajloo.Portal.Common.Constants.Accounting.Session.AccDocument]).Tables[AccDocument.TRANSACTIONS_TABLE]; 
    grdDocumentRows.DataBind(); 
} 

private void RefreshPage() 
{ 
    Creditors = (decimal)((AccDocument)Session[Hajloo.Portal.Common.Constants.Accounting.Session.AccDocument]).Tables[AccDocument.ACCDOCUMENT_TABLE].Rows[0][AccDocument.ACCDOCUMENT_CREDITORS_SUM_FIELD]; 
    Debtors = (decimal)((AccDocument)Session[Hajloo.Portal.Common.Constants.Accounting.Session.AccDocument]).Tables[AccDocument.ACCDOCUMENT_TABLE].Rows[0][AccDocument.ACCDOCUMENT_DEBTORS_SUM_FIELD]; 
    if ((Creditors - Debtors) != 0) 
     labBalance.InnerText = GetLocalResourceObject("Differentiate").ToString() + "‏" + (Creditors - Debtors).ToString(Hajloo.Portal.Common.Constants.Common.Documents.CF) + "‏"; 
    else 
     labBalance.InnerText = GetLocalResourceObject("Balance").ToString(); 

    lblSumDebit.Text = Debtors.ToString(Hajloo.Portal.Common.Constants.Common.Documents.CF); 
    lblSumCredit.Text = Creditors.ToString(Hajloo.Portal.Common.Constants.Common.Documents.CF); 

    if (grdDocumentRows.EditItemIndex == -1) 
     clearControls(); 
} 

钍等情况都是一样的。如何启用这些代码的快捷方式(使用会话,NHibernate等)

+0

您可以发布在服务器端代码的一些例子吗? – 2010-06-08 12:33:47

+0

@Mark,我会更新我的问题,查看代码示例 – 2010-06-08 13:04:56

+0

您是否找到答案?如果是的话请在这里发布:)(谢谢你的好jQuery DatePicker插件:)我正在休闲你的网站帖子:)) – Shahin 2010-10-29 06:48:46

回答

4

这是直接从你给的链接。

在ASP.NET pg,PageName.aspx中,您有一个用[WebMethod]装饰的MethodName。若要从一个快捷方式调用方法名,做这样的事情在JavaScript:

$(document).bind('keydown', 'Ctrl+c', zzz); // hotkeys plugin 

function zzz() { 

    $.ajax({ 
     type: "POST", 
     url: "PageName.aspx/MethodName", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      // Update your pg accordingly 
     } 
    }); 
} 

UPD:

[WebMethod] 
public static void MethodName(int rownum) 
{ 
    DeleteRow(rownum.ToString()); 
    clearControls(); 
    cmdSaveTrans.Text = Hajloo.Portal.Common.Constants.Accounting.Documents.InsertClickText; 
    btnDelete.Visible = false; 
    grdDocumentRows.EditItemIndex = -1; 
    BindGrid(); 
} 
+0

用这种方法我不能启用捷径。再看看我的问题。我更新了代码的和平 – 2010-06-08 13:06:05

+0

我不知道我理解。你想分配一个按键来删除一行?但是,你怎么知道要删除哪一行?假设您选择了一行,并且您希望按键删除该行,则必须在javascript中提取行号并将其提供给ajax()调用中的Methodname。然后你必须提取C#删除代码,并将其放入一个名为MethodName的WebMethod中,如果我正确地解释了事情。 – Steve 2010-06-08 18:05:16

+0

要删除的shor-cut是Delete + Number,例如Delete + 3将删除第3行,并且此功能仅适用于其他行的第9行用户必须选择该行,然后按CTRL + Delete,这样会出现一些short-不仅切一把钥匙。我真的很困惑,要实现这一点。我不知道我该怎么做,以及如何去做。我用我的删除行方法更新我的问题,你可以看看它,并建议一个解决方案来实现快捷方式来真正调用我的服务器端方法吗?谢谢。 – 2010-06-09 06:46:55