Как обновить несколько частичных просмотров по клику Ajax.Actionlink - PullRequest
15 голосов
/ 14 июня 2011

Я использую несколько частичных представлений в моем представлении. слева. У меня есть кнопка ссылки.

В середине у меня есть 2 частичных представления, допустим, вверх и вниз Я могу обновить частичное представление Up Теперь я хочу обновить частичное представление вниз по нажатию той же кнопки ссылки

Я могу отправить только один UpdateTargetID в кнопке Ajax.ActionLink но я хочу обновить 2 частичных вида по нажатию одной и той же кнопки.

1) Есть ли способ, которым я могу передать более одного UpdateTargetID в Ajax.ActionLink или же 2) Я могу вернуть несколько частичных просмотров в Home Controller или любым другим способом, как вы предложили Пожалуйста, ответьте мне

Спасибо всем за ответ Позвольте мне рассказать вам, что я сделал, чтобы обновить несколько частичных представлений одним щелчком мыши Это ссылка на действие, по которой я нажимаю Здесь я использую функцию OnSucess этой ссылки Action для обновления, эта ссылка 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>

1 Ответ

14 голосов
/ 14 июня 2011

Да, есть - не используйте Ajax.ActionLink.

IMO, библиотека MS Ajax, как и в веб-формах, раздута.

Будьте проще - используйте 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 для генерации URL-адреса для вызова AJAX, поэтому, если ваши маршруты меняются, тогда ваш JS не должен, например:

.get('@Url.Action('Controller', 'Action1')', function(data)

или

.get('@Url.RouteUrl('SomeNamedRoute')', function(data)

Если вы помещаете этот скрипт во внешний файл, вам нужно будет использовать технику для установки URL в главном окне, а затем читать из внешней переменной.

Такие методы включают переменную JavaScript, скрытое поле, передачу URL в функцию в качестве параметра и т. Д.

...