Asp. net core MVC (Razor Pages) - привязывать вложенный список объектов к записи - PullRequest
0 голосов
/ 27 марта 2020

У меня есть страница редактирования, которая редактирует объект. Этот объект имеет вложенный список другого объекта.

EditModel:

public class EditModel : BasePageModel
    {
        [BindProperty]
        public Update.Command Command { get; set; }

        public async Task<IActionResult> OnGetAsync(Update.Query query)
        {
            Command = await Mediator.Send(query);

            return Page();
        }

        public async Task<IActionResult> OnPostAsync()
        {
            await Mediator.Send(Command); // Command.ListA is null here. ???

            return RedirectToPage("Index");
        }
    }

Edit.cs html:

<form method="post">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>

    <div class="form-group">
        <label asp-for="Command.Id"></label>
        <input asp-for="Command.Id" readonly class="form-control"/>
    </div>

  // other non relevant properties...

  <table class="table">
         <thead>
            <tr>
                <th>
                    <label asp-for="Command.ListA[0].Date"></label>
                </th>
                <th>
                    <label asp-for="Command.ListA[0].Value"></label>
                </th>
            </tr>
         </thead>
         <tbody>

            @foreach (var item in Model.Command.ListA)
            {
                <tr>
                    <td>
                        <input type="date" asp-for="@item.Date"/>
                    </td>
                    <td>
                        <input type="number" asp-for="@item.Value"/>
                    </td>
                </tr>
            }

            </tbody>
        </table>

        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-primary"/>
        </div>

Когда я отправить обратно с помощью кнопки отправки. Мой список А является нулевым. Может ли кто-нибудь помочь мне понять, почему моя команда не связывается?

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 марта 2020

Ожидается от MVC привязки модели. Знак @ предназначен для извлечения данных, а не для их привязки. Вы должны нацелить asp-for на фактическое свойство.

Вместо использования foreach измените его на:

@for (int i = 0; i < Model.Command.ListA.Count; i++)
{
    <tr>
        <td>
            <input type="date" asp-for="Command.ListA[i].Date"/>
        </td>
        <td>
            <input type="number" asp-for="Command.ListA[i].Value"/>
        </td>
    </tr>
}

Убедитесь, что ваш ListA является реальным списком, а не IEnumerable

...