我在View上使用多个部分视图。 在左手侧。我有一些链接按钮。
在中间,我有2个局部视图让我们假设Up和Down 我可以更新Up局部视图 现在我想点击同一个链接按钮
更新Down部分视图我只能在Ajax.ActionLink按钮中发送一个UpdateTargetID 但我想点击同一个按钮更新2个部分视图。
1)我有没有办法在Ajax.ActionLink中传递多个UpdateTargetID 要么 2)我可以在Home Controller中返回多个部分视图 或者你建议的任何其他方式 请回复我
谢谢,大家回复 让我告诉你我为了一次点击刷新多个局部视图所做的工作 这是我用来点击的动作链接 这里我使用此Action链接的OnSucess函数进行更新,此Action链接在局部视图上
<%= Ajax.ActionLink("Select", "Employee", new { Id = Employee.EmployeeID }, new AjaxOptions { UpdateTargetId = "EmployeeDiv", HttpMethod = "Post", OnSuccess = "function(){EmployeeHistory(-2," + Employee.EmployeeID.ToString() + ");}" })%>
这是我从局部视图中调用的javascript
function EmployeeHistory(EmployeeID) {
var url = '<%= Url.Action("PartialviewAction", "ControllerName") %>'
$('#PartialviewDiv1').load(url, { Id: EmployeeID });
var url1 = '<%= Url.Action("PartialviewAction", "ControllerName") %>'
$('#PartialviewDiv2').load(url1, { Id: EmployeeID });
}
并且这两个div位于我要更新的索引视图中
<div id="Paritalview div1"><% Html.RenderPartial("PartialViewname1"); %></div>
<div id="Paritalview div2"><% Html.RenderPartial("PartialViewname2"); %></div>
答案 0 :(得分:14)
是的 - 请勿使用Ajax.ActionLink
。
IMO,MS Ajax库,与Web Forms一样,是臃肿的。
保持简单 - 使用jQuery - 然后你完全控制:
$(function() {
$('#somelink').click(function(e) {
e.preventDefault();
$.get('/controller/action1', function(data) {
$('#up').html(data);
});
$.get('/controller/action2', function(data) {
$('#down').html(data);
});
});
});
但是,由于你要更新两个面板,我建议将这两个中间面板包装在它自己的局部视图中 - 然后通过一个动作方法提供 - 这样你只需要1个ajax调用。
修改强>
正如@FelixM所提到的,您应该使用Url.Action
或Url.RouteUrl
来生成AJAX调用的URL,因此如果您的路由发生变化,那么您的JS不需要,例如:
.get('@Url.Action('Controller', 'Action1')', function(data)
或
.get('@Url.RouteUrl('SomeNamedRoute')', function(data)
如果您将此脚本放在外部文件中,则需要使用一种技术在主视图中设置url,然后从外部变量中读取。
这些技术包括JavaScript变量,隐藏字段,传递URL作为参数等等。