Динамически загружать частичные виды
Как я могу динамически загружать частичный вид?
Я имею в виду, что у меня есть это представление, скажем ListProducts
, там я выбираю некоторые dropdownlists с продуктами и т.д. и с выбранными значениями из тех, которые я хочу заполнить частичным представлением, которое было бы в div, который был невидимым, но после события onchange()
станет видимым и с данными из определенных выбранных элементов.
Ответы
Ответ 1
Используйте jQuery $. load() с действием контроллера, которое возвращает частичное представление.
Например:
HTML
<script type="text/javascript">
$(document).ready(function()
{
$("#yourselect").onchange(function()
{
// Home is your controller, Index is your action name
$("#yourdiv").load("@Url.Action("Index","Home")", { 'id' : '123' },
function (response, status, xhr)
{
if (status == "error")
{
alert("An error occurred while loading the results.");
}
});
});
});
</script>
<div id="yourdiv">
</div>
контроллер
public virtual ActionResult Index(string id)
{
var myModel = GetSomeData();
return Partial(myModel);
}
Вид
@model IEnumerable<YourObjects>
@if (Model == null || Model.Count() == 0)
{
<p>No results found</p>
}
else
{
<ul>
@foreach (YourObjects myobject in Model)
{
<li>@myObject.Name</li>
}
</ul>
}
Ответ 2
Вы можете сделать это, выполнив следующие действия. В вашем контроллере вы возвращаете частичный вид.
[HttpGet]
public virtual ActionResult LoadPartialViewDynamically()
{
var query = _repository.GetQuery();
return PartialView("_PartialViewName", query);
}
то в представлении у вас есть пустой div
<div id="partialgoeshere"></div>
а затем загрузите частичный вид с помощью jQuery:
function LoadPartialView() {
$.get("@Url.Action(MVC.ControllerName.LoadPartialViewDynamically())", { null }, function (data) {
$("#partialgoeshere").empty();
$("#partialgoeshere").html(data);
});
}
Надеюсь, что это поможет
Ответ 3
Я считаю, что вы можете сделать что-то вроде в этом примере, просто используя событие изменения в своем раскрывающемся списке. Это простой вызов jQuery, который вы можете найти на веб-сайте jQuery.
$("#dropdown").change(function() {
$("#destination").load("/Products/GetProduct", $(this).val(),
function(result) {
// do what you need to do
});
});
Первый параметр - это представление, которое необходимо вызвать для деталей.
Второй параметр - это выбранное значение.
Третий параметр функции $.load - это функция обратного вызова, в которой вы можете проанализировать результат и выполнить то, что вам нужно сделать.
Если у вас есть несколько select $(this).val(), это даст вам массив с выбранными параметрами.
Если вы хотите вернуть объект Json, вы можете захотеть следовать в этом примере.
Ответ 4
Использовать Ajax:)
http://api.jquery.com/jQuery.ajax/
Пример:
$.post(window.gRootPath + "Customer/PartialView", { Question: questionId})
.done(function (data) {
$('#partialDiv').html(data.responceText);
});
Ответ 5
Вы можете использовать ajax для вызова действия, а затем просто вставить строку html с помощью jQuery на страницу, где вы хотите:
на стороне сервера:
Отрисовать частичное представление строки
Оказывает частичное представление строки сервера на html, полезно, когда вам нужно добавить частичный вид на страницу ASP.NET MVC через AJAX.
стороны клиента:
$('#yourDdl').change(function()
{
$.get('/InsertPartialViewUsingAjax', function (data)
{
$('#container').html(data);
});
});
Ответ 6
В следующей статье рассказывается, как это сделать с минимальным javascript. В основном вы возвращаете html вместо JSON в ваш объект ответа.
https://www.simple-talk.com/content/article.aspx?article=2118