首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据库中的模型转换为编辑页面?

如何将数据库中的模型转换为编辑页面?
EN

Stack Overflow用户
提问于 2019-02-17 12:16:51
回答 1查看 17关注 0票数 0

我的输入模型由NewForm组成,其中包含许多字段

代码语言:javascript
复制
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:

代码语言:javascript
复制
@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键入数据。控制器:

代码语言:javascript
复制
 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);
    }
    }

优先使用代码和一对多

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 09:44:08

当执行db.NewForms.Find()来分配您想要返回到视图中的模型时,听起来像Model.Fields属性仍然包含null,这表明EF还没有创建依赖集合。据我所知,您应该在entity类的无参数构造函数中添加集合实例定义:

代码语言:javascript
复制
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在必要时实例化集合:

代码语言:javascript
复制
public virtual List<Field> Fields { get; set; } 

相关问题:

EF codefirst : Should I initialize navigation properties?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54730059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档