【问题标题】:How to fire server-side methods with jQuery如何使用 jQuery 触发服务器端方法
【发布时间】:2010-06-08 09:55:07
【问题描述】:

我有一个大型应用程序,我将为它启用快捷键。我会找到 2 个为我执行此操作的 JQuery 插件 (demo plug-in 1 - Demo plug-in 2)。你可以找到他们两个in this post in StackOverFlow

我的应用程序已完成,我将为其添加一些功能,因此我不想再次编写代码。

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

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

你也可以找到一篇好文章here, by Dave Ward


更新:这里是场景。当用户按 CTRL+Del 时,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();
}

其他情况相同。如何为这类代码启用快捷方式(使用 session 、 NHibernate 等)

【问题讨论】:

  • 你能发布一些服务器端代码的例子吗?
  • @Mark,我会更新我的问题,看看代码示例
  • 您找到答案了吗?如果是,请在此处发布 :) (感谢您提供的 Jquery DatePicker 插件 :) 我正在放弃您的网站帖子 :))

标签: .net asp.net jquery performance plugins


【解决方案1】:

这直接来自您提供的链接。

在您的 ASP.NET pg PageName.aspx 中,您有一个使用 [WebMethod] 修饰的 MethodName。要从快捷方式调用 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
        }
    });
}

更新:

[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();
}

【讨论】:

  • 使用这种方法我无法启用快捷方式。再看看我的问题。我用代码和平更新它
  • 我不确定我是否理解。您想指定击键来删除一行吗?但是,你怎么知道要删除哪一行?假设您选择了一行并且您希望击键删除该行,您必须在 javascript 中提取行号并将其提供给 ajax() 调用中的 Methodname。然后,如果我解释正确,您必须提取 C# 删除代码并将其放入名为 MethodName 的 WebMethod 中。
  • 删除的快捷方式是 Delete+Number,例如 Delete+3 将删除第 3 行,此功能仅适用于 9 行,其他行用户必须选择行,然后按 CTRL+删除所以有一些快捷键不是只有一个。我真的很困惑实现这一点。我不知道应该做什么以及如何去做。我用我的删除行方法更新我的问题,你能看一下它并提出一个解决方案来实现真正调用我的服务器端方法的快捷方式吗?谢谢。
  • @Hajloo - 我将每个快捷键 ctrl+1,2,3 ... 绑定到 zzz1()、zzz2()、zzz3() 并根据 zzz 调用 MethodName(rowNum)函数调用,查看更新。
  • 这里提到的答案是WebMethod我在我的博客里解释过http://hajloo.wordpress.com/2010/06/08/what-is-page-method-and-how-to-use-it/希望对你有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2012-07-03
  • 1970-01-01
相关资源
最近更新 更多