Как перенести модель на страницу редактирования из базы данных? - PullRequest
0 голосов
/ 17 февраля 2019

Моя входная модель состоит из NewForm, в которой много полей

public class NewForm
    {
         [Key]
        public int Id { get; set; }
        public string HeadForm { get; set; }

        public List<Field> Fields { get; set; }   
    }

    public class Field
    {
        public int Id { get; set; }
        public bool Check { get; set; }
        public string HeadField { get; set; }
    }

Я хочу взять значения из базы и отредактировать их, но исключение Model.Fields.Count.Хотя строка "HeadForm" отображается.Списки не отображаются.EditPage:

@model EditFormApplication.Models.NewForm

@using (Html.BeginForm("Edit", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(model => model.HeadForm)
    <h5>Fields:</h5><br>
        @for ( var i = 0; i< Model.Fields.Count; i++) {
          @Html.TextBoxFor(model => model.Fields[i].HeadField)                     
          @Html.CheckBoxFor(model => model.Fields[i].Check)
        }
        <input type="button" value="Add Field" onclick="addField(this);">
        <input type="submit"value="Save">
}

Например, я печатаю данные по ID = 3. Контроллер:

 public ActionResult CreateForm(NewForm model)
    {
        using (NewFormContext db = new NewFormContext())
        {
           db.NewForms.Add(model);
           db.SaveChanges();
           return RedirectToAction("Edit");
         }
     }

  public ActionResult Edit()
    {
        using (NewFormContext db = new NewFormContext()) { 
            var model = db.NewForms.Find(3);

        return this.View(model);
    }
    }

используется первый код и один ко многим

1 Ответ

0 голосов
/ 18 февраля 2019

Похоже, что свойство Model.Fields по-прежнему содержит ноль, когда db.NewForms.Find() выполняется для назначения модели, которую вы хотите вернуть в представление, указывая на то, что EF еще не создает зависимую коллекцию.Насколько я знаю, вы должны добавить определение экземпляра коллекции внутри конструктора без параметров класса сущности:

public class NewForm
{
    public NewForm()
    {
        // instantiate list here
        Fields = new List<Field>();
    }

    [Key]
    public int Id { get; set; }
    public string HeadForm { get; set; }

    public List<Field> Fields { get; set; }   
}

Или, если вы используете отложенную загрузку, пометьте свойство как virtual, чтобы позволить EF создавать экземпляр коллекции, покаобязательно:

public virtual List<Field> Fields { get; set; } 

Связанная проблема:

EF codefirst: Должен ли я инициализировать свойства навигации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...