2013-04-15 4 views
0

У меня есть 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, а не текущий вид.

ответ

1

Вы можете использовать функцию jQuery .html(). Внутри вашего успех обратного вызова, сделать что-то вроде этого:

<script> 
    $(document).ready(function() { 
     $('#environmentsListbox').click(function() { 
      var selected = $('#environmentsListbox').find(":selected").text(); 
      $.ajax({ 
       url: '@Url.Action("Index")', 
       data: { selectedEnvironment: selected },     
       success: function(data) { 
        $('#container').html(data); 
       } 
      }); 
     }); 
    }); 
</script> 

Вы хотите, чтобы убедиться, что вид вы возвращаетесь из контроллера имеет разметку, что вам нужно (без разметки коды и т.д.). Получите доступ к этому URL прямо в браузере, чтобы узнать, что он возвращает.

+0

Это ответ, который пришел с другого поста. Прямо сейчас, весь макет возвращается из моего метода контроллера. Итак, если я правильно понял, было бы лучше извлечь мой основной код представления в другое представление и вернуть его как PartialView в мой метод контроллера? – Rockdocta

+0

Да, это был бы разумный подход, если это действие контроллера предназначено для использования только в этом контексте. Если вы хотите, чтобы этот URL-адрес был доступен непосредственно в браузере, у вас есть еще один вариант с использованием функции .load() jQuery и использования функции «фрагмент страницы», где вы можете вытащить конкретный контейнер из результирующей страницы. Посмотрите здесь: http://api.jquery.com/load/ – AlbertVo

Смежные вопросы