在Javascript ASP.NET Ajax回调函数中获取调用对象的引用?

在Javascript ASP.NET Ajax回调函数中获取调用对象的引用?,javascript,jquery,asp.net-ajax,Javascript,Jquery,Asp.net Ajax,我正在调用一个ASP.NET Ajax方法,例如,在一个控件上用[Ajax.AjaxMethod]标记的方法,当用户单击一个链接时,该控件是用JavaScript动态创建的,它基本上在一个表中,当单击链接时,一个tr/td以JS代码构建并添加到表中。在回调函数中,我需要知道调用的是哪一行,因为我只是将数据附加到该行中的输入控件;我有一个隐藏字段,其中包含添加的项目总数,但我不能使用它,因为它总是添加到最后一行,因为当添加新行时,它是递增的,而不是启动函数的行 如下所示: // fieldName

我正在调用一个ASP.NET Ajax方法,例如,在一个控件上用[Ajax.AjaxMethod]标记的方法,当用户单击一个链接时,该控件是用JavaScript动态创建的,它基本上在一个表中,当单击链接时,一个tr/td以JS代码构建并添加到表中。在回调函数中,我需要知道调用的是哪一行,因为我只是将数据附加到该行中的输入控件;我有一个隐藏字段,其中包含添加的项目总数,但我不能使用它,因为它总是添加到最后一行,因为当添加新行时,它是递增的,而不是启动函数的行

如下所示:

// fieldName is a lookup string...
function loadOperators(fieldName) { 
    MyPage.LoadOperatorsFor(fieldName, loadOperators_Callback);
}

function loadOperators_Callback(response) { 
    var currentRow = // how to obtain this?

    // do other stuff here...
} 
我也在使用jQuery,但是这些方法是以ASP.NET AJAX风格完成的,因为这是我们目前在工作中使用的风格

我如何才能确定触发Ajax函数的实际行,因此我只能填充该行中包含的下拉列表,我不能依赖用户创建一行,然后填充该行;他们可能会创建5行,然后返回第2行并选择一些内容,所以我必须知道他们在第2行选择了一个值,而不是3/4/5?它似乎不是响应对象的一部分,但回调函数似乎不接受任何其他参数

我能想到的唯一一件事就是将它添加到我的AjaxMethod中,以便在响应中传回,但这充其量只是一个黑客行为,因为我返回一个数据集,行号与数据没有任何关系


我忘了添加,我没有使用ASP.NET AJAX库,只有带有[AJAX.AjaxMethod]的jQuery和标记方法。

您需要传递一个委托作为回调参数

function loadOperators(fieldName) { 
    MyPage.LoadOperatorsFor(fieldName, Function.createDelegate({"fieldName":fieldName},loadOperators_Callback));
}
在你的回拨中,你可以

function loadOperators_Callback(response) { 
    var currentRow = this.fieldName;
    // do other stuff here...
} 

所有ASP.NET AJAX web服务javascript代理都允许您在如下上下文中传递:

MyPage.LoadOperatorsFor(fieldName, loadOperators_CallBack,
                        loadOperators_Error, context);
loadOperators\u错误是您的错误处理程序,上下文可以是您想要的任何内容-在您的情况下,传入currentRow

然后在您的回复中,您将有:

function loadOperators_CallBack(response, context) {
   // context is your currentRow value
}

获取loadOperators函数中的行,然后将此范围绑定到回调中的行。您可能需要在IE中模拟Function.prototype.bind,对于记录,我可以通过简单地使用内联匿名函数来解决这个问题,这样我就可以从调用方法引用行号,而不是传递函数引用。简单有效。

将当前行从服务器传递到ajax回调中除非我按照我在编辑的最后一段中所说的做,否则当前行仅存在于客户端,而不存在于服务器端。我尝试如下操作:MyPage.LoadOperatorsForfieldName、loadOperators\u回调、null、lineNumber,但在回调中,行号返回为未定义。有什么想法吗?这里有一些关于方法结构的附加信息-和。仔细检查您是否正确输入了行号。
// fieldName is a lookup string...
function loadOperators(fieldName) { 
    // assume this is a click handler on the row
    // if it isn't somehow get the row.
    var row = $(this);
    MyPage.LoadOperatorsFor(fieldName, loadOperators_Callback.bind(row));
}

function loadOperators_Callback(response) { 
    var currentRow = this;

    // do other stuff here...
}