2016-08-13 5 views
0

Я пытаюсь обновить часть страницы, содержащую частичные виды. Моя попытка сделать это ниже:Как передать данные, полученные через AJAX, в частичные представления ASP MVC?

 $.ajax({ 
     type: 'GET', 
     url: actionUrl, 
     success: function (data) { 
      $("#results").html(""); 
      $("#results").append(@Html.Partial("_FirstPartial", data.FirstDataSet)); 
      $("#results").append(@Html.Partial("_SecondPartial", data.SecondDataSet));  
      } 
     }); 

Конечно, я не мог передать переменные JS методам ASP MVC, как это, так как я мог? Или, возможно, существует совершенно другой, лучший подход к тому, как я могу обновить страницу?

+0

'@ Html.Partial()' - код бритвы и оценивается на сервере перед его отправкой на просмотр. Ваш метод контроллера должен возвращать частичный вид (и если вам нужно вернуть 2 частичных файла, потому что они должны быть отображены в разных позициях на странице, а затем сделать 2 ajax-звонка) –

ответ

2

View (Javascript):

$.ajax({ 
    type: 'GET', 
    url: actionUrl, 
    success: function (data) { 
     $("#results").html(""); 
     $.post('@Url.Action ("FirstPartial")',{data:data.FirstDataSet},function(ret){ 
      $("#results").append(ret); 
      $.post('@Url.Action ("SecondPartial")',{data:data.SecondDataSet},function(ret2){ 
       $("#results").append(ret2); 
      } 
     } 
    } 
}); 

Контроллер:

public ActionResult FirstPartial(string data) 
{ 
    return PartialView("_FirstPartial", data); 
} 
public ActionResult SecondPartial(string data) 
{ 
    return PartialView("_SecondPartial", data); 
} 

Вы должны использовать частичные действия (что возвращает частичный вид). В javascript после получения наборов данных вы вызываете другое частичное действие для рендеринга наборов данных.

Я вложил два вызова ajax, чтобы сделать второй снимок под первым видом. Если вы удалите вложенное место, то второе может отобразиться перед первым.

+0

Ваш код отлично подходит, но заставляет поставить логический код JavaScript в MVC, поскольку вы используете Razor, смешанный с JS. –

+0

@Mahmoodvcs Мне нравится это решение. Благодарю. Но похоже, что Html.Action запускается при загрузке страницы, независимо от того, где вы помещаете ее в js. И в результате он падает с пустой моделью. У вас есть какие-то намеки на это? –

+1

Ах !!. Сожалею. Это должно быть '@ Url.Action'. Изменил ответ. – Mahmoodvcs

0

Сделать в методе контроллера, который возвращает частичное вы хотите, то в вашем Index.cshtml файле сделать что-то вроде этого:

<script> 
    var Services = { 
    linkToPartial: '@Url.Action('MethodName', 'Controller')' 
    } 
</script> 

Этот код обеспечит ссылку действия, которые вы можете использовать в вашем успехе $ АЯКС метод и аргументы.

$("#results").html(""); 
$.ajax({ 
    method: 'GET', 
    url: Services.linkToPartial, 
    data: { 
    argumentName: data.FirstDataSet 
    } 
}).done(function (html) { 
    $('#results').append(html); 
}); 
Смежные вопросы