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

Динамическая загрузка частичного представления

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

Здесь требуются следующие функции:

  • Пользователь вводит форму. Отображается выпадающий список, а общий частичный вид отображается с помощью некоторых элементов управления вводом.
  • Пользователь выбирает другое значение в раскрывающемся меню
  • Частичное представление обновляется. Основываясь на значении раскрывающегося списка, он должен загрузить частичный вид. Некоторые значения имеют пользовательские представления, связанные с ними (я мог бы назвать их с помощью первичного ключа, например), другие - нет. Когда нет пользовательского вида; он должен загрузить значение по умолчанию. Когда он есть, он должен, конечно, загрузить пользовательский.

И все это должно быть ajaxified, когда это возможно.

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

4b9b3361

Ответ 1

Предполагая, что у вас есть выпадающее меню:

@Html.DropDownListFor(
    x => x.ItemId,
    new SelectList(Model.Items, "Value", "Text"),
    new { 
        id = "myddl", 
        data_url = Url.Action("Foo", "SomeController")
    }
)

вы можете подписаться на событие .change() этого выпадающего списка и отправить запрос AJAX на действие контроллера, которое вернет частичное и введет результат в DOM:

<script type="text/javascript">

$(function() {
   $('#myddl').change(function() {
       var url = $(this).data('url');
       var value = $(this).val();
       $('#result').load(url, { value: value })
    });
});

</script>

И поместите тег DIV, где вы хотите, чтобы частичный вид отображался в представлении хоста:

<div id="result"></div>

и внутри действия Foo вы можете вернуть частичный вид:

public ActionResult Foo(string value)
{
    SomeModel model = ...
    return PartialView(model);
}

Ответ 2

Вам нужно обработать событие с измененным значением в поле со списком, получить идентификатор, а затем использовать ajax для вызова действия сервера, передав выбранный идентификатор. Действие сервера вернет соответствующее представление. На стороне клиента вы заполняете возвращаемое представление в область на странице.

Например, действие на стороне сервера:

public ActionResult GetView(int id)
{
    switch (id)
    {
        case 1:
            return View("View1", model1);
            break;
        case 2:
            return View("View2", model2);
            break;
        default:
            return View("Default", modelDefault);
    }
}