Обновление коллекции на основе входных данных при просмотре - PullRequest
0 голосов
/ 09 мая 2018

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

Есть 2 цикла:

  1. Цикл 1 - OrderLines (В корзине может быть несколько событий каждый имеет 1 OrderLine)
  2. Цикл 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);
 }
...