У меня есть ListBox в моем представлении - когда я выбираю элемент из списка, я хочу вызвать метод контроллера, выполнить поиск по этому значению, а затем перерисовать страницу с помощью этих значения.Выполнение действия контроллера из jQuery/javascript
Мой ListBox код и мой код JQuery выглядит следующим образом:
@using (Html.BeginForm())
{
...
<h3>Environments</h3>
@Html.ListBox("Environment",
new SelectList(Model.Environments),
new {@id="environmentsListbox"})
...
}
<script>
$(document).ready(function() {
$('#environmentsListbox').click(function() {
var selected = $('#environmentsListbox').find(":selected").text();
$.ajax({
url: '@Url.Action("Index")',
data: { selectedEnvironment: selected },
success: function(data) {
---- What to do here?
}
});
});
});
</script>
Способ управления выглядит следующим образом:
public ActionResult Index(string selectedEnvironment)
{
// code omitted for brevity...
var frameworkConfig = GetInfo(selectedEnvironment);
return View(frameworkConfig);
}
вызов работает правильно выбранный текст делает его на контроллер метод .... однако что мне делать с результатом? Я ищу что-то сравнимое с @Html.Action("Index", selectedEnvironment)
, которое вы использовали бы в обычном контексте MVC (не-js). У меня есть возвращаемый код вида в переменной data
, есть ли способ перезагрузить страницу с этим значением?
Я видел ответ в этом сообщении: How to call URL action in MVC with javascript function? и очень близок к тому, что мне нужно сделать, однако полученный код представления из этого метода контроллера вставляется в тег div, а не текущий вид.
Это ответ, который пришел с другого поста. Прямо сейчас, весь макет возвращается из моего метода контроллера. Итак, если я правильно понял, было бы лучше извлечь мой основной код представления в другое представление и вернуть его как PartialView в мой метод контроллера? – Rockdocta
Да, это был бы разумный подход, если это действие контроллера предназначено для использования только в этом контексте. Если вы хотите, чтобы этот URL-адрес был доступен непосредственно в браузере, у вас есть еще один вариант с использованием функции .load() jQuery и использования функции «фрагмент страницы», где вы можете вытащить конкретный контейнер из результирующей страницы. Посмотрите здесь: http://api.jquery.com/load/ – AlbertVo