使用Ajax.ActionLink ASP.Net MVC多个更新目标ID
有没有办法用Ajax.ActionLink指定多个更新目标ID,以便我可以在回调上呈现一组部分视图?
我看到的问题是Ajax.ActionLink只提供了一个目标ID供我更新,但我需要的是在ajax调用后用不同的数据更新页面的多个区域。
对此的任何帮助都会很棒! 谢谢!
您可以查看以下链接: http : //devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx
我有同样的问题,它帮助我解决它
不,没有。 但是,您可以编写自己执行此操作的代码。 你需要:
- 将返回的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)对于服务器端,您可以在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; $("").html(html).contents().each(function () { update.insertBefore(this, top); }); break; case "AFTER": $("").html(html).contents().each(function () { update.appendChild(this); }); break; default: $(update).html(html); break; } });
Javascript只是使用相同的id来传递以仅抓取该内容并用相同的内容替换相同的id。 这也适用于Ajax.BeginForm()。 合理?
- 在asp.net MVC中,如何使用AutoPostBacking在部分视图中更改TextBox的值
- 如何在MVC4 RazorView中实现Dropdownlist列表图像选择以及文本框
- 如何确定Ajax调用导致内部服务器错误的原因?
- 为什么jquery ui对话框会破坏asp.net mvc的默认模型绑定。
- 如何防止HTML.ActionLink上的默认?
- jQuery在Ajax中调用ASP.NET MVC C#中的Action Method
- 如果使用jquery生成表单,则触发模式
- 在ASP.NET MVC 3中,如何在Create()视图中使用Razor语法获取模型?
- jQuery引用用局部视图生成的div来附加另一个局部视图