Подтвердить что ты не робот

Динамически загружать частичные виды

Как я могу динамически загружать частичный вид?

Я имею в виду, что у меня есть это представление, скажем ListProducts, там я выбираю некоторые dropdownlists с продуктами и т.д. и с выбранными значениями из тех, которые я хочу заполнить частичным представлением, которое было бы в div, который был невидимым, но после события onchange() станет видимым и с данными из определенных выбранных элементов.

4b9b3361

Ответ 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