2012-01-17 8 views
0

У меня есть часть таблицы, значения которой зависят от значения в моем выпадающем списке. Как обновить таблицу, когда выбранный вариант раскрывающегося списка изменится.Обновить таблицу при изменении dropdownoption

сетки

@foreach (var choice in ViewData.Model.Options where choiceId == ViewData.Model.choiceLevelId) 
        { 
         <tr class='gridrow'> 
          <td>..... 

выпадающий

<div class="editor-field"> 
       @Html.DropDownListFor(model => model.choiceLevelId, 
          (
          ... 

ответ

3

Что таблице вы говорите? ASP.NET MVC не знает таблиц или стульев. Он работает с моделями, контроллерами и представлениями.

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

Вам нужно будет использовать javascript в своем представлении, чтобы подписаться на событие с этим выпадающим списком. Затем у вас есть несколько возможностей:

  • Используйте запрос AJAX для отправки выбранного значения на сервер.
  • Перенаправить текущего браузера (используя window.location.href) в действие контроллера, передав ему выбранное значение в качестве аргумента действия.

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

Позвольте мне проиллюстрировать первый подход с примером использования JQuery:

<script type="text/javascript"> 
    $(function() { 
     // subscribe to the .change event of the dropdowns 
     $('select').change(function() { 
      // fetch the newly selected value 
      var selectedValue = $(this).val(); 
      // send it as an AJAX request to some controller action 
      $.post('@Url.Action("Foo")', { value: selectedValue }, function(result) { 
       // this will be invoked in the case of success of the AJAX call 
       // TODO: do something with the results returned by the controller action 
      }); 
     }); 
    }); 
</script> 

и ваши действия контроллера, который будет обрабатывать запрос AJAX:

[HttpPost] 
public ActionResult Foo(string value) 
{ 
    // this action will be invoked when the user changes the selection 
    // in one of the dropdown lists and passed the newly selected value. 
    // So using this new value you could perform the desired processing 
    // on your model here and return a view. Since this action was invoked 
    // with an AJAX call you could return a JSON string to the client indicating 
    // the success or failure of whatever processing you were intending to perform 
    // here 

    ... 

} 

UPDATE:

Если вы хотите отправить форму, содержащую выпадающие списки при изменении выбора, вы можете используйте следующее:

<script type="text/javascript"> 
    $(function() { 
     // subscribe to the .change event of the dropdowns 
     $('select').change(function() { 
      // trigger the submission of the containing form: 
      $(this).closest('form').submit(); 
     }); 
    }); 
</script> 
+0

Таблица, на которую я ссылался, в значительной степени представляет собой всю форму. Все opf мои данные присутствуют в таблице, включая раскрывающийся список. Я хочу обновить, какие члены моей модели показывают на основе выбора. например, если моя модель была машиной, и в списке я выбрал красный, только красная информация о автомобилях должна отображаться. Я не думаю, что мне следовало бы перейти к контроллеру, потому что все данные уже доступны для просмотра только для фильтрации. –

+0

@atbyrd, поэтому вы хотите отправить форму, не так ли? В этом случае вы можете подписаться на событие изменения выпадающих списков, как я показал в своем ответе, и вручную инициировать представление содержащейся формы, как это: '$ (this) .closest ('form'). Submit(); '. Я обновлю свой ответ, чтобы включить это. –

+0

Я попытался использовать этот $ ("select"). Change (function() { alert ("hello"); }); Чтобы подписаться на событие изменения, но ничего не происходит. –

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