【问题标题】:ASP.NET MVC Complex Model propertiesASP.NET MVC 复杂模型属性
【发布时间】:2016-12-23 16:24:26
【问题描述】:

我正在创建一个新的 ASP.NET MVC(带有实体框架)项目,但我有点难以理解在面对这个“问题”时我应该怎么做:

假设我有 foo 模型:

public class foo
{
    public int ID { get; set; }

    public virtual Book {get; set;}

    public int BookID {get; set; }

    public virtual ICollection<Theme> Themes {get; set;}

    /* Now what ?!? */
}

所以让我试着解释一下:

  • 我了解到,为了简单地获取下拉列表以获取选择元素并将其与他的“父”模型绑定的 View-Controller 过程,我必须为 Book ID 设置一个“ID”字段 以及与 Book 模型的实际关系的虚拟属性。我真的不知道这是否是开始的“最佳”方法。

  • 然后我必须将其他模型类型的“列表”添加到我的 Foo 模型中。那么现在我该怎么办?在视图方面,我正在考虑创建一个带有滚动条的复选框列表,但我的主要问题仍然是弄清楚如何处理“模型关系问题”。

谢谢。

【问题讨论】:

  • 如果您不打算对模型进行子类型化,那么标记属性virtual 是没有意义的。
  • 我认为这种情况下的“虚拟”具有与 EF 相关的特殊含义。不过不确定....我从 C++ 中了解虚拟,如果您感到困惑(也许),我不知道?
  • 哦,你没有提到你在使用 EF。是的,它在那里有效果。
  • 我的错。我会编辑。
  • 提示:不要使用 Entity Framework 实体/域模型类作为视图模型。而是为您的视图提供专用的视图模型类。 ViewModel 应该代表 View(和浏览器)和控制器之间的 2-way 数据。对于单向数据(例如 DropDownList 项),请使用 ViewDataViewBag

标签: c# asp.net entity-framework model-view-controller


【解决方案1】:

你需要在 Theme 中引用 foo

public class foo
{
    public int ID { get; set; }

    public virtual Book {get; set;}

    public int BookID {get; set; }

    public virtual ICollection<Theme> Themes {get; set;}

}

public class Theme
{
    public int ID { get; set; }

    [Foreignkey("fooID")]
    public virtual foo foo{get; set;}

    public int fooID {get; set; }

}

【讨论】:

  • 这是一个多对多的关系,所以我不认为 Theme 引用 Foo 会这样做。
猜你喜欢
  • 2017-07-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多