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

Asp.net mvc 使用Ajax.ActionLink ASP.Net MVC更新多个目标ID,asp.net-mvc,jquery,Asp.net Mvc,Jquery,是否有一种方法可以使用Ajax.ActionLink指定多个更新目标ID,以便在回调时呈现一组局部视图 我看到的问题是Ajax.ActionLink只为我提供了一个要更新的目标id,但我需要的是在Ajax调用后使用不同的数据更新页面的多个区域 这方面的任何帮助都会很好!谢谢 没有。但是,您可以自己编写代码来实现这一点。您需要: 将返回的HTML划分为不同的“区域”,应用于页面的不同部分。您可以在控制器上(可能通过呈现多个操作并存储返回的HTML片段列表)或JavaScript来完成此操作 编写J

是否有一种方法可以使用Ajax.ActionLink指定多个更新目标ID,以便在回调时呈现一组局部视图

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


这方面的任何帮助都会很好!谢谢

没有。但是,您可以自己编写代码来实现这一点。您需要:

  • 将返回的HTML划分为不同的“区域”,应用于页面的不同部分。您可以在控制器上(可能通过呈现多个操作并存储返回的HTML片段列表)或JavaScript来完成此操作
  • 编写JavaScript代码以获取返回的HTML,迭代要更新的目标,并对每个目标应用适当的HTML片段。代码看起来像下面的代码
  • 不要使用Ajax表单HTML帮助程序。相反,呈现一个标准表单并通过JavaScript提交它
  • 例如:

    $.ajax({
        type: "POST", 
        url: "/action/controller",
        success: function(data) {
            var key;
            for (key in data) {
                $("#" + key).html(data[key]);
            }
        }
     });
    
    这假定您调用的操作将返回一个对象,其中属性名称是要更新的元素的ID,属性值是作为字符串的HTML片段。

    您可以检查以下链接:


    我也遇到过同样的问题,它帮助我解决了这个问题

    我知道这个问题很老,但如果你使用@Gregoire所指的相同解决方案(http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx)对于服务器端,可以在AjaxOption中传递多个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;
        }
    });
    
    mode=(element.getAttribute(“数据ajax模式”)| |“”).toUpperCase();
    $(element.getAttribute(“数据ajax更新”))。每个(函数(i,更新){
    var top,
    html=$(“#”+update.id,data.html();
    开关(模式){
    “之前”一案:
    top=update.firstChild;
    $(“”).html(html).contents().each(函数)(){
    update.insertBefore(此,顶部);
    });
    打破
    “之后”一案:
    $(“”).html(html).contents().each(函数)(){
    update.appendChild(本);
    });
    打破
    违约:
    $(更新).html(html);
    打破
    }
    });
    

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

    我使用了这个,工作了,只是做了一些小改动,让它在VB中工作。不过,这是一个混乱的解决方案。mvc团队向我们求助的时候需要挨一记耳光,为什么他们不能像人们所期望的那样,创建一个能够正常工作并完成日常基本工作的框架?@Erx_VB.NExT.Coder:更干净的解决方案是使用Json结果,您可以在此页面上使用javascript更新页面的任何部分result@Erx_VB.NExT.Coder我知道这是很久以前的事了,但如果您不必继续使用asp.net框架,您应该研究ApacheWicket。Wicket使用Java作为服务器端代码(只有细微的区别)。