我可以给MVC Ajax回调一个参数吗?

时间:2011-08-30 23:23:07

标签: javascript ajax asp.net-mvc-3 parameters callback

   @Ajax.ActionLink("Pujar",
                    "BidOnSmallAuction", 
                    "Auctions",
                    new { id = @item.UniqueIdentifierID },
                    new AjaxOptions { UpdateTargetId = "divright" + item.UniqueIdentifierID, InsertionMode = InsertionMode.Replace, OnSuccess = "Update" },
                    new { @class = "btn primary" })

例如,当我点击此ActionLink时,将在回调后调用javascript "Update"方法。

由于这个ajax链接在许多不同的拍卖中,每个拍卖都有自己的计时器,我需要能够告诉Update方法运行哪个拍卖。

因此,如果您可以告诉我如何将Update方法传递给参数,我可以弄清楚其余部分。

感谢您的时间。


修改

根据两个答案的建议,我尝试运行以下内容:

//Just for testing purposes.
function Update(uniqueDivId) {
    alert(uniqueDivId);    
} 

//And in the view's code:

@Ajax.ActionLink("Pujar",
                 "BidOnSmallAuction",
                 "Auctions",
                 new { id = @item.UniqueIdentifierID },
                 new AjaxOptions { UpdateTargetId = "divright" + item.UniqueIdentifierID,               
                                   InsertionMode = InsertionMode.Replace, 
                                   OnSuccess = "function() { Update(3); }" },
                 new { @class = "btn primary" })

未调用警报消息。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

@Ajax.ActionLink(
   "Pujar",
   "BidOnSmallAuction",
   "Auctions",
   new { id = @item.UniqueIdentifierID },
   new AjaxOptions { UpdateTargetId = "divright" + item.UniqueIdentifierID,
                     InsertionMode = InsertionMode.Replace,
                     OnSuccess = "function() { Update(someParam); }" },
   new { @class = "btn primary" }) 

这样OnSuccess本身调用一个没有参数的函数,但该函数依次知道如何用参数调用Update()。您应该能够使用字符串连接来根据需要设置参数(类似于您对UpdateTargetId所做的操作),例如:

...
new AjaxOptions { UpdateTargetId = "divright" + item.UniqueIdentifierID,
    InsertionMode = InsertionMode.Replace,
    OnSuccess = "function() { Update(" + item.UniqueIdentifierID + "); }" },
...

更新:

哦,对不起,看起来像每个人可能只是将一个函数的名称作为一个字符串,我以为它期待对该函数的引用。

您可以在现有代码的同时动态地在页面上包含其他脚本吗?如果是,请将上面的内容更改为OnSuccess="UpdateProxy",然后动态输出以下内容:

<script>
function UpdateProxy() {
   Update(/* insert your item.UniqueIdentifierID or other params here */);
}
</script>

如果您在页面上同时拥有多个ajax链接,则需要UpdateProxy1(), UpdateProxy2()等等。

答案 1 :(得分:0)

你能试试吗

OnSuccess = "function() { Update(\"some param\"); }"