2015-03-13 4 views
0

Я вызываю свое действие контроллера MVC через Ajax и хочу, чтобы действие возвратило два частичных вида. Оба частичных представления должны быть возвращены как html.Как вернуть два частичных вида из контроллера как html?

Это, как я называю через AJAX

$.ajax({ 
     url: '/SomeController/GetContent', 
     type: 'GET', 
     dataType: "html", 
     success: function (d, status, xhr) { 
      $('#partial1') = d.? 
      $('#partial2') = d.? 
     }, 
     error: function (req, status, errorObj) { 
      alert('error'); 
     } 
    }); 

Я пытался что-то подобное для действия контроллера:

public PartialViewResult[] GetContent() 
    { 
     PartialViewResult[] pvs = new PartialViewResult[2]; 

     pvs[0] = PartialView("Partial1", null); 
     pvs[1] = PartialView("Partial2", null); 

     return pvs; 
    } 

Это работает, если я просто возвращает один частичный вид (не возвращаются как массив), но для двух я просто получаю пустой массив, возвращенный в успех ajax. Есть идеи, как это решить?

+1

Верните один вид, который содержит 2 частичных вида. –

+0

Спасибо. Не могли бы вы показать, как это делается? – brinch

+0

, если вы отправляете 'pvs', поскольку json-массив может перебирать массив и вставлять в соответствующие элементы. Настройте 'dataType' соответственно – charlietfl

ответ

1

Создание единого представления, которое возвращает обе Partials

/Views/YourController/GetContent.cshtml

@Html.Partial("Partial1") 
@Html.Partial("Partial2") 

и изменить метод

public PartialViewResult GetContent() 
{ 
    return PartialView(); 
} 

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

+0

Спасибо, но мне нужно будет добавить партитуры вручную в моем представлении с помощью JQuery , поэтому, вероятно, вам придется идти с двумя отдельными вызовами, как вы предлагаете. – brinch

+0

И так как ajax - асинхронный, это, вероятно, даст лучшее время отклика. –

+0

не нужно делать 2 запроса, может фильтровать ответ, обертывая в '$()' и используя методы jQuery для получения содержимого для каждого элемента в DOM – charlietfl

0

Я не уверен, что вы собираетесь достичь, но вы нарушаете базовое связывание частичного вида и привязки. - это те частичные виды, которые имеют одну и ту же функциональность, но отдельные данные затем помещаются в единый частичный вид или если у вас есть разные функции с отдельным представлением, а затем связываются с 2-мя вызовами ajax. Альтернативный способ использования новейших функций MVC6 viewcomponent http://www.asp.net/vnext/overview/aspnet-vnext/vc или привязка состояния AngularJS.

Смежные вопросы