У меня есть следующая проблема: у меня есть форма, имеющая несколько выпадающих списков, текстовые поля и т.д., А также у меня есть две таблицы: - 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 на основе этой формы, так что есть ли возможность обновить модель, а затем запустить вставки? Спасибо за помощь.
Ок, наконец, мне удалось передать значения между списками, но у меня есть другая проблема - когда я меняю свои списки, я не могу отправить их в остальную часть моей формы, потому что, когда я нажимаю 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?