Двойной список в asp .net MVC 4

0

Я создал двойной список в mvc 4. В методе post я не могу получить данные модели. Я могу перетащить элемент из одного списка в другой и отправить мне данные в свой почтовый метод. Но в model.SelectedColumns я получаю null.Что я делаю неправильно?

вот мой code--

модель:

public class Columns
{
    public List<string> SelectedColumns { set; get; }
    public List<string> RemainingColumns { set; get; }
}

Посмотреть:

@Html.BeginForm("AddRemoveColumns", "DashBoard",FormMethod.Post){
<div style="float: left">
    <h2>
        AddRemoveColumns</h2>
    <ol id="SelectedColumns" class="connectedSortable">
        @foreach (var item in Model.SelectedColumns)
        {

            <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>@item
            </li>
        }
    </ol>
</div>
<div style="float: right">
    <ol id="RemainingColumns" class="connectedSortable">
        @foreach (var item in Model.RemainingColumns)
        {

            <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>@item
            </li>
        }
    </ol>
</div>
<input type="submit" value="Submit"  />
}

скрипт:

<script type="text/javascript">          
   $(function () { $("#SelectedColumns, #RemainingColumns").sortable({ 
        connectWith: ".connectedSortable" }).disableSelection(); 
   });

</script>

контроллер:

public ActionResult AddRemoveColumns()
{
    Columns columns = DbAccess.getSelectedColumns();
    return View(columns);

}

[HttpPost]
public ActionResult AddRemoveColumns(Columns model)
{
    Columns columns = new Columns();
    columns.SelectedColumns = model.SelectedColumns;
    return View();
}
Теги:
asp.net-mvc-4

2 ответа

0

форма требует <input> для отправки своих значений контроллеру

вы можете использовать скрытый ввод, если вы не хотите использовать окно списка

<input id="hiddenInput" name="SelectedColumns" type="hidden" value="" />

* имя ввода должно быть точно таким же, как модель

затем обновить выбранные значения с помощью jquery

$(function () { 
    $("#SelectedColumns, #RemainingColumns").sortable({ 
        connectWith: ".connectedSortable" ,
        update: function() {
            var selectedValues = $("#SelectedColumns").serialize(); //get selected values
            $('#hiddenInput').val(selectedValues); //update hidden input
        }
    }).disableSelection();
});
0

Вы просто показываете свой список, используя теги html, и вы не привязывали свой список к любому элементу управления, почему вы получаете нулевое значение. Если вы хотите использовать публикацию формы, вам необходимо привязать модель с помощью элементов управления MVC, как показано ниже:

@Html.ListBoxFor(model => model.SelectedColumns, new {@id = "SelectedColumns"}) @Html.ListBoxFor(model => model.RemainingColumns, new {@id = "RemainingColumns"})

благодаря

  • 0
    Я не хочу использовать @ Html.ListBoxFor, потому что я использую сортировку jquery. Так есть ли способ получить измененные данные моих списков в моем контроллере? ... Спасибо за ответ
  • 0
    Просто вы можете использовать $ .ajax для передачи списка контроллеру или, если хотите, использовать отправку формы, затем сохранить 2 скрытых @ Html.ListBoxFor списка и связать его с моделью и изменить их значение с помощью jquery при изменении вашего фактического списка (сортировка jquery список)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню