使用Ajax.ActionLink ASP.Net MVC多个更新目标ID

时间:2009-07-06 17:34:59

标签: asp.net-mvc jquery

有没有办法用Ajax.ActionLink指定多个更新目标ID,以便我可以在回调上呈现一组部分视图?

我看到的问题是Ajax.ActionLink只为我提供了一个目标ID进行更新,但我需要的是在ajax调用后用不同的数据更新页面的多个区域。

对此的任何帮助都会很棒!谢谢!

3 个答案:

答案 0 :(得分:6)

您可以查看以下链接:http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

我有同样的问题,这有助于我解决它

答案 1 :(得分:4)

不,没有。但是,您可以编写自己执行此操作的代码。你需要:

  1. 将返回的HTML分区为不同的“区域”,您将应用于页面的不同部分。您可以在控制器上执行此操作(可能通过呈现多个操作并存储返回的HTML片段列表)或JavaScript。
  2. 编写JavaScript代码以获取返回的HTML,迭代您要更新的目标,并将相应的HTML片段应用于每个目标。代码看起来像下面的代码。
  3. 不要使用Ajax表单HTML帮助器。相反,渲染标准表单并通过JavaScript提交。
  4. 示例:

    $.ajax({
        type: "POST", 
        url: "/action/controller",
        success: function(data) {
            var key;
            for (key in data) {
                $("#" + key).html(data[key]);
            }
        }
     });
    

    这假定您调用的操作将返回一个对象,其中属性名称是要更新的元素的ID,属性值是HTML片段作为字符串。

答案 2 :(得分:1)

我知道这个问题已经过时但是如果你使用与@Gregoire指出的相同的解决方案(http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with- jquery-superload.aspx)对于服务器端,你可以在AjaxOptions中传递多个id

@Ajax.ActionLink("Link", "Action", new AjaxOptions { UpdateTargetId = "id1, #id2" })
在这种情况下,MVC框架会自动将“#”添加到id1。然后,您需要在#45行周围修改jquery.unobtrusive-ajax.js的asyncOnSuccess函数,如下所示:

mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase();
$(element.getAttribute("data-ajax-update")).each(function (i, update) {
    var top,
        html = $("#" + update.id, data).html();

    switch (mode) {
    case "BEFORE":
        top = update.firstChild;
        $("<div />").html(html).contents().each(function () {
            update.insertBefore(this, top);
        });
        break;
    case "AFTER":
        $("<div />").html(html).contents().each(function () {
            update.appendChild(this);
        });
        break;
    default:
        $(update).html(html);
        break;
    }
});

Javascript只是使用相同的id来传递以仅抓取该内容并用相同的内容替换相同的id。这也适用于Ajax.BeginForm()。有意义吗?