Я пишу страницу, которая позволяет пользователю вводить значения в текстовое поле, которое затем добавляется в коллекцию.
Есть 2 цикла:
- Цикл 1 - OrderLines (В корзине может быть несколько событий каждый
имеет 1 OrderLine)
- Цикл 2 - DelegatesList (может быть несколько FirstName и т. Д., Но оно уникально для 1 OrderLine)
То, что должно произойти, - это когда они нажимают кнопку UpdateAction, форма передает значения DelegatesList [x] (x является списком делегатов уникальной OrderLine) в контроллер. Затем контроллер должен обновить коллекцию OrderLines.DelegatesList для связанной строки заказа со всеми строками из списка DelegatesList из представления (список x).
Я понимаю логику, но я изо всех сил пытаюсь понять, как я несу значения в контроллер, а затем обновляю коллекцию в цикле на контроллере. Любая помощь с благодарностью
Вид:
@model TSW.Web.ViewModels.Partial.BasketSummary
@using (@Html.BeginUmbracoForm<BasketPageSurfaceController>
("Update"))
<article id="basket-item-delegate__main" class="basket-item-delegate__main" data-id="@i">
<div class="basket__items">
<div class="basket-item-delegate">
@for (int x = 0; x < @Model.CustomerBasket.OrderLines[i].Quantity; x++)
{
var y = x + 1;
<div class="basket-item-delegate-list">
<h4>Delegate @y</h4>
<div class="basket-item-delegate__input-cell">
<h6>First Name:</h6>
@Html.TextBoxFor(m => @Model.CustomerBasket.OrderLines[i].DelegatesList[x].FirstName)
</div>
<div class="basket-item-delegate__input-cell">
<h6>Last Name:</h6>
@Html.TextBoxFor(m => @Model.CustomerBasket.OrderLines[i].DelegatesList[x].LastName)
</div>
<div class="basket-item-delegate__input-cell">
<h6>Email</h6>
@Html.TextBoxFor(m => @Model.CustomerBasket.OrderLines[i].DelegatesList[x].Email)
</div>
</div>
}
<nav class="basket-item-delegate__buttons">
<input type="submit" name="UpdateAction" value="Add Delegates" class="basket-item-delegate__button button" />
</nav>
</div>
</div>
</article>
Сводка корзины VM:
public class BasketSummary
{
public Basket CustomerBasket { get; set; }
public List<Event> BasketEvents { get; set; }
public LinkItem CheckoutPage { get; set; }
public LinkItem DelegatePage { get; set; }
public JObject ECommerceSummary { get; set; }
public Event OrderEvent(int eventId)
{
return BasketEvents.FirstOrDefault(x => x.Id == eventId);
}
}
OrderLine VM:
public class OrderLine
{
[Required(ErrorMessage = "Quantity must be a number")]
public int Quantity { get; set; }
public List<OrderDelegate> DelegatesList { get; set; }
}
OrderDelegate VM:
public class OrderDelegate
{
[Key]
public int OrderLineId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
РЕДАКТИРОВАТЬ: контроллер
public async Task<ActionResult> Basket()
{
var model = Mapper.Map<BasketVM>(CurrentContent);
model.BasketSummary.CustomerBasket = await TransactionLibrary.GetBasketAsync();
model.BasketSummary.CustomerBasket.AllowBasketUpdates = true;
model.BasketSummary.BasketEvents = new List<Event>();
model.InnerPageHeader.ShowHeading = true;
model.InnerPageHeader.Title = model.PageTitle;
await model.BasketSummary.CustomerBasket.OrderLines.ForEachAsync(async dt =>
{
var eventDetail = await _eventService.GetEvent(dt.EventId);
model.BasketSummary.BasketEvents.Add(eventDetail);
var delegatelist = new List<OrderDelegate>
});
model.BasketSummary.CheckoutPage = Mapper.Map<LinkItem>(_pageFactory.GetCurrentHomepage().CheckoutPage);
if (Session["ErrorList"] != null)
{
var errorList = Session["ErrorList"] as IEnumerable<KeyValuePair<string, ModelState>>;
foreach (var modelState in errorList)
{
ModelState.Add(modelState);
}
Session.Remove("ErrorList");
}
return View(model);
}