ASP.NET MVC 4 передача значений между списками

1

У меня есть следующая проблема: у меня есть форма, имеющая несколько выпадающих списков, текстовые поля и т.д., А также у меня есть две таблицы: - SelectedItems - AvailableItems. Эти две таблицы являются результатом рендеринга двух списков в моей модели. Что мне нужно сделать, так это когда пользователь нажимает кнопку добавления в определенной строке элемента, а затем перемещаю элемент из AvailableItems в SelectedItems. Моя идея заключалась в том, чтобы работать над списками, чтобы добавить их в один, удалить из другого. Я не знаю, как обновлять списки объектов, которые можно найти в модели

   public class Model
   {
      public List<Item> SelectedItems {get; set;}
      public List<Item> AvailableItems {get; set;}
      //other properties
   }

Мой частичный вид:

<table>
<thead>
                        <tr>
                            <th>ID</th>
                            <th>Name</th>
                            <th>Description</th>
                            <th></th>
                        </tr>
                    </thead>

                    @if (Model.SelectedItems != null)
                    {
                        foreach (var item in Model.SelectedItems)
                        {
                        <tr>
                            <td>
                                @Html.DisplayFor(modelItem => item.ID)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Name)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Description)
                            </td>
                            <td>
                                @Html.ActionLink("Add", "RemoveItem", new { ItemID = item.ID}, new { @class = "btn btn-primary" })
                            </td>
                        </tr>
                        }
                    }

</table>

<table>
<thead>
                        <tr>
                            <th>ID</th>
                            <th>Name</th>
                            <th>Description</th>
                            <th></th>
                        </tr>
                    </thead>

                    @if (Model.AvailableItems != null)
                    {
                        foreach (var item in Model.AvailableItems)
                        {
                        <tr>
                            <td>
                                @Html.DisplayFor(modelItem => item.ID)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Name)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Description)
                            </td>
                            <td>
                                @Html.ActionLink("Add", "AddItem", new { ItemID = item.ID}, new { @class = "btn btn-primary" })
                            </td>
                        </tr>
                        }
                    }

</table>

Проблема в том, что я не могу перезагрузить всю страницу. Мне нужно сделать inserts do db на основе этой формы, так что есть ли возможность обновить модель, а затем запустить вставки? Спасибо за помощь.

Теги:
asp.net-mvc

1 ответ

0

Ок, наконец, мне удалось передать значения между списками, но у меня есть другая проблема - когда я меняю свои списки, я не могу отправить их в остальную часть моей формы, потому что, когда я нажимаю submit, моя модель не имеет никаких изменений.

Вот моя функция Ajax/JQuery:

function AddItemToList(ItemID) {
    var selectedItems = '@Html.Raw(Json.Encode(Model.SelectedItems))';
    var data = JSON.stringify({ ItemID: ItemID, SelectedIts: selectedItems});

    $.ajax({
        async: false,
        url: "AddItemToList",
        type: 'post',
        data: data,
        contentType: "application/json; charset=utf-8",
        error: function () { if (window.console && console.log) { console.log("error"); } }
    }).done(function (partialViewResult) {
        $("#ItemListGrid").html(partialViewResult);

    });
    ;
}

И это метод в контроллере:

[HttpPost]
public ActionResult AddItemToList(string ItemID, string SelectedIts)
{
    model.ListItem = manager.getItemByID(Convert.ToDecimal(ItemID));
    model.AvailableItems = manager.getItemsList();
    model.SelectedItems = JsonConvert.DeserializeObject<List<Item>>(SelectedIts);

    if (model.SelectedItems.All(r => r.ItemID != ItemID))
    {
        Item it = model.AvailableItems.Where(r => r.ItemID == ItemID).FirstOrDefault();
        model.SelectedItems.Add(it);
    }
    return PartialView("_ItemListGrid", model);
}

Я делаю это неправильно, но я не уверен, что. Есть ли способ связать списки в моем частичном представлении с моделью в представлении CreateData?

Ещё вопросы

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