У меня, кажется, есть некоторые проблемы, когда я думаю о том, как лучше всего выполнять обновление и удаление из списков в MVC. Я попытаюсь объяснить мою проблему на коротком примере. Из Entity Framework у меня есть мой объект Позиция:
public int Quantity { get; set; }
public int PositionNumber { get; set; }
public string ArticleNumber { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
Теперь я слышал, что лучше сделать ViewModel foreach View с используемыми свойствами, чтобы сделать его простым, ViewModel выглядит одинаково. В контроллере мы возвращаем список позиций в представление путем сопоставления модели с моделью представления.
Теперь представление отображает текстовые поля для количества и замечания, которые пользователь может изменить. Он также может удалить позицию.
Теперь при публикации данных, введенных пользователем, я делаю что-то вроде этого:
[HttpPost]
public ActionResult Index(IEnumerable<ShoppingCartPositionModel> shoppingCartPositions)
{
var positions = _shoppingCartManager.GetActiveShoppingCart().Positions.Values.OrderBy(p => p.PositionNumber).ToList();
if (FormCollection.AllKeys.Any(k => k.Contains("Remove")))
{
string key = FormCollection.AllKeys.Where(k => k.Contains("Remove")).First();
int start = key.LastIndexOf('[') + 1;
int end = key.LastIndexOf(']');
int difference = end - start;
int index;
if (int.TryParse(key.Substring(start, difference), out index))
{
_shoppingCartManager.DeleteShoppingCartPosition(positions.ElementAt(index));
}
}
else
{
if (ModelState.IsValid)
{
for (int i = 0; i < positions.Count(); i++)
{
var position = positions.ElementAt(i);
var cartPosition = shoppingCartPositions.ElementAt(i);
position.PositionNumber = cartPosition.PositionNumber;
position.Quantity = cartPosition.Quantity;
position.Remark = cartPosition.Remark;
}
_shoppingCartManager.UpdateShoppingCartPositions(positions);
}
}
var cartPositions = GetShoppingCartPositionsModel();
UpdateModel(cartPositions);
return View(cartPositions.ToList());
}
Моя проблема в том, как это будет работать, если в то же время другой пользователь удалил объект или даже добавил новую позицию между другими? Будет ли лучше сделать скрытое поле на виде и карте этим? И чтобы обнаружить обновления сохранить измененную дату и отобразить скрытое поле в представлении для этого, а? Потому что я думаю, что если бы я просто проверил обновление даты, как это, у меня всегда была бы самая новая дата обновления, и я не думаю, что в течение нескольких секунд службе потребуется обновить элемент, любой другой пользователь может изменить данные.
Я надеюсь, что это объясняет мою проблему и спасибо тем, кто пытается помочь мне найти способ сделать это.