Как обновить несколько partialview при щелчке Ajax.Actionlink
Я использую несколько частичных представлений в моем представлении. слева. У меня есть кнопка ссылки.
В середине у меня есть 2 частичных вида. Допустим, вверх и вниз. Я могу обновить частичный вид вверх. Теперь я хочу обновить частичный вид вниз, нажав одну и ту же кнопку ссылки.
Я могу отправить только один UpdateTargetID в кнопке Ajax.ActionLink, но я хочу обновить 2 частичных вида нажатием одной и той же кнопки.
1) Есть ли способ, которым я могу передать более одного UpdateTargetID в Ajax.ActionLink или 2) Я могу вернуть несколько частичных представлений в Home Controller или любым другим способом, как вы предложили Пожалуйста, ответьте мне
Спасибо всем за ответы Позвольте мне рассказать вам, что я сделал, чтобы обновить несколько частичных представлений одним щелчком мыши. Это ссылка на действие, которую я использую, чтобы щелкнуть здесь. Я использую функцию OnSucess этой ссылки на действие, чтобы обновление, это действие ссылка на частичное представление
<%= 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>
Ответы
Ответ 1
Да, есть - не используйте 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);
});
});
});
Однако, поскольку вы обновляете обе панели, я бы предложил обернуть эти две средние панели в частичном виде, чтобы они были собственными, а затем выполнить это с помощью одного действия - таким образом вам понадобится только один вызов ajax.
Edit
Как упоминает @FelixM, вы должны использовать Url.Action
или Url.RouteUrl
для создания URL-адреса для вызова AJAX, поэтому, если ваши маршруты изменяются, то ваш JS не нужен, например:
.get('@Url.Action('Controller', 'Action1')', function(data)
или
.get('@Url.RouteUrl('SomeNamedRoute')', function(data)
Если вы помещаете этот script во внешний файл, вам нужно будет использовать технику для установки url в главном представлении, а затем прочитать из внешней переменной.
Такие методы включают переменную JavaScript, скрытое поле, прохождение URL-адреса для функции в качестве параметра и т.д.