Обновить таблицу при изменении выпадающего списка - PullRequest
0 голосов
/ 18 января 2012

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

grid

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

dropdown

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

1 Ответ

3 голосов
/ 18 января 2012

О каком столе вы говорите?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

    ...

}

ОБНОВЛЕНИЕ:

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

<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>
...