Я уверен, что было бы несколько способов сделать это.
Концептуально, вам нужно сохранить на сервере, какие элементы были перетащены в какой список. Затем при загрузке страницы вам необходимо проверить эти списки на стороне сервера, чтобы определить, какие элементы отображать в каких списках.
Ниже приведен просто псевдокод - он вряд ли компилируется и не является полным, но, надеюсь, этого достаточно, чтобы вы начали и получили идею.
Для хранения «капель»:
В методе Javascript drop(ev)
выполните асинхронный пост-запрос к действию контроллера, отправив идентификатор отброшенного элемента и идентификатор списка, в который он был отброшен. Затем вам нужно будет где-то хранить эту информацию, чтобы при следующем отображении страницы вы могли получить ее. Возможно, в переменной Session.
Ваш метод действия может выглядеть примерно так:
public ActionResult PutItemInList(int listId, int itemId)
{
if (listId == ToDoList)
{
var toDoIds = (List<int>)Session["ToDoIds"];
toDoIds.Add(itemId);
Session["ToDoIds"] = toDoIds;
}
if (listId == DoneList)
{
var doneIds = (List<int>)Session["ToDoIds"];
doneIds.Add(itemId);
Session["DoneIds"] = doneIds;
}
}
Для отображения страницы:
Вам нужно будет использовать информацию из переменной Session для визуализации представления.
Добавить новый класс ViewModel, который будет хранить:
- список KtoCo (ваш текущий ViewModel)
- список идентификаторов в списке задач
- список идентификаторов в списке Готово
Примерно так:
public class ToDoViewModel
{
public List<KtoCos> KtoCos { get; set; }
public List<int> ToDoList { get; set; }
public List<int> DoneList { get; set; }
}
В вашем методе действия, который визуализирует View, получите информацию из Session и создайте новый класс ViewModel.
Примерно так:
public ActionResult ActionMethod()
{
var toDoIds = (List<int>)Session["ToDoIds"];
var doneIds = (List<int>)Session["DoneIds"];
var viewModel = new ToDoViewModel();
viewModel.DoneList.AddRange(doneIds);
viewModel.ToDoList.AddRange(toDoIds);
viewModel.Ktos = GetFromDbSomehow();
return View(viewModel);
}
Затем в представлении Razor, модель которого теперь является новым классом ViewModel, проверьте эти свойства списка, чтобы отобразить элементы в правильном месте.
Примерно так:
@foreach (var item in Model.KtoCos)
{
<div draggable="true" ondragstart="drag(event)" id=@item.Id width="88" height="31">
@Html.DisplayFor(modelItem => item.Kto)
@Html.DisplayFor(modelItem => item.Co)
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</div>
}
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
@foreach (var item in Model.ToDoList)
{
<div>@item.SomeInfo</div>
}
</div>
<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)">
@foreach (var item in Model.DoneList)
{
<div>@item.SomeInfo</div>
}
</div>