Получить значение Null при привязке списка объектов к модели контроллера MVC - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблемы с привязкой модели, содержащей список объектов для метода редактирования. Это список Factory, который включает в себя список другого объекта (FactoryHotline).

Нет проблем, когда я передаю данные из контроллера в View. Но когда я пытаюсь отправить данные из View обратно в контроллер, свойства некоторых моделей всегда равны нулю.

Модель:

public class Factory 
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public List<FactoryHotline> FactoryHotlineList { get; set; }
}

public class FactoryHotline 
    {
        public Guid Id { get; set; }

        public Guid FactoryId { get; set; }

        public string Caption { get; set; }

        public string Hotline { get; set; }
    }

Это вид:

@model List<WebDataLayer.Models.Factory>

<form action="/Factories/Edit" method="POST" enctype="multipart/form-data">
@Html.AntiForgeryToken()
<div class="form-horizontal">
        <table id="factoriesTable">
            <thead>
                <tr>
                    <th>Name</th>
                    <th class="Hotline1" >Hotline 1</th>
                    <th class="Hotline2" >Hotline 2</th>
                </tr>
            </thead>
            <tbody>
                @for (int i = 0; i < Model.Count; i++)
                {
                    @Html.HiddenFor(model => model[i].Id)
                     <tr>
                         <td>@Model[i].Name</td>

                        @for (int h = 0; h < Model[i].FactoryHotlineList.Count; h++)
                        {
                            <td>
                                <div>
                                    <b>Caption: </b>
                                    @Html.EditorFor(model => model[i].FactoryHotlineList[h].Caption, new { htmlAttributes = new { @class = "form-control ShortInput", id = "captionInput", maxlength = "39" } })
                                </div>
                                <div>
                                    <b>Hotline:</b>
                                    @Html.EditorFor(model => model[i].FactoryHotlineList[h].Hotline, new { htmlAttributes = new { @class = "form-control ShortInput", id = "hotlineInput", maxlength = "15" } })
                                    @Html.ValidationMessageFor(model => model[i].FactoryHotlineList[h].Hotline)
                                </div>
                            </td>
                        }
                    </tr>
                }
            </tbody>
        </table>
</form>

В моем контроллере метод редактирования:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit (List<Factory> factories)
        {
        }

Значение имеет только Id, остальные (подпись, горячая линия) всегда равны нулю в List<Factory> factories

Так я передаю данные из контроллера в представление

// GET: Edit
        public ActionResult Edit()
        {
            var factories = _factoryService.All().OrderBy(p => p.Name);
            var list = factories.ToList();
            return View("Edit", list);
        }

Я отлично использую Entity Framework.

1 Ответ

0 голосов
/ 26 апреля 2019

Это потому, что вы использовали HiddenFor, чтобы сохранить идентификатор в качестве скрытого поля. Чтобы иметь значение в обратной передаче, оно должно быть частью элемента ввода (input, select, checkbox, textarea и т. Д.) Или как скрытое поле.

@Html.HiddenFor(model => model[i].Name)

Я бы предложил использовать viewmodel вместе с automapper в этом случае.

...