【发布时间】:2009-07-06 17:34:58
【问题描述】:
有没有办法使用 Ajax.ActionLink 指定多个更新目标 ID,以便我可以在回调时呈现一组部分视图?
我看到的问题是 Ajax.ActionLink 只提供一个目标 id 供我更新,但我需要在 ajax 调用后使用不同的数据更新页面的多个区域。
对此的任何帮助都会很棒!谢谢!
【问题讨论】:
标签: asp.net-mvc jquery
有没有办法使用 Ajax.ActionLink 指定多个更新目标 ID,以便我可以在回调时呈现一组部分视图?
我看到的问题是 Ajax.ActionLink 只提供一个目标 id 供我更新,但我需要在 ajax 调用后使用不同的数据更新页面的多个区域。
对此的任何帮助都会很棒!谢谢!
【问题讨论】:
标签: asp.net-mvc jquery
您可以查看此链接:http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx
我遇到了同样的问题,它可以帮助我解决它
【讨论】:
不,没有。但是,您可以编写自己执行此操作的代码。您需要:
例子:
$.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) 用于服务器端,您可以在 AjaxOptions 中传递多个 id
@Ajax.ActionLink("Link", "Action", new AjaxOptions { UpdateTargetId = "id1, #id2" })
在这种情况下,MVC 框架会自动将“#”添加到id1。然后,您需要修改 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()。有意义吗?
【讨论】: