【问题标题】:.NET Core MVC ViewModel.NET Core MVC 视图模型
【发布时间】:2017-07-31 15:48:17
【问题描述】:

我有一个“链接”模型。

public class Link
{
    public int ID { get; set; }
    public string Name { get; set; }        
    public string Project { get; set; }
}

我想将项目存储在另一个数据库表中,并以某种方式将其链接到此模型,并在下拉列表中提供选项。 我想我需要使用 ViewModel,但我不确定我需要做什么。

public class Project
{
    public int ID { get; set; }
    public string Name { get; set; }
}

我想我需要创建一个名为“Project”的新模型,然后创建一个将两者结合起来的 ViewModel。

然后我需要为 ViewModel 制作一个单独的控制器还是可以在“链接”控制器中使用它?

【问题讨论】:

  • 问题不清楚。您想将项目存储在另一个数据库中吗?如果是,为什么?是技术要求吗?顺便说一句,您应该使用外键在LinkProject 之间建立链接。你可以看看这个教程:docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app。它可能对你有用。
  • 项目应该是唯一的并存储在单独的表中。添加新链接时,不同的项目会在下拉列表中显示为选项。
  • 您需要使用“项目”表中的记录填充下拉列表,您是否有数据访问层来执行此操作? - 一旦你有了这个,然后将项目的 ID 存储在“链接”记录中,以便对其进行引用。

标签: c# .net asp.net-mvc viewmodel


【解决方案1】:

如果我没听错的话,你想从 Link 类访问项目列表。我相信你正在使用 MVC。如果这是你想做的,你可以用你的 Link 类来做到这一点

public class Link
{
    public int ID { get; set; }
    public string Name { get; set; }        
    public int ProjectID { get; set; }
    public virtual Project Project {get: set;}
}

并且您可以将您的项目类定义为这样

public class Project
{
    public int ProjectID { get; set; }
    public string Name { get; set; }
}

所以现在当你为 Link 生成控制器类时,你会得到类似的东西

ViewBag.ProjectID = new SelectList(db.Projects, "ProjectID", "Name", list.ProjectID);

你的视图看起来像这样

 @Html.DropDownList("ProjectID ", null, htmlAttributes: new { @class = "form-control" })

希望对你有帮助

【讨论】:

  • 是的,这看起来不错,我会试一试。只有一个问题,似乎到处都表明 ViewModel 是这种场景的好习惯,这是真的吗?
  • 是的,这是真的。 ViewModel 允许您将来自一个或多个数据模型或数据源的多个实体塑造成一个对象,并针对视图的使用和呈现进行了优化。你可以在这里了解很多:rachelappel.com/…
【解决方案2】:

试试这个

public class Link
{
    [Key]
    public int LinkId { get; set; }
    public string LinkName { get; set; }    
     public int ProjectId { get; set; }
    public virtual Project projects { get; set; }
}

public class Project
{
    [Key]
    public int ProjectId { get; set; }
    public string ProjectName { get; set; }
    public virtual ICollection<Link> links { get; set; }
}

然后只为这两个类做 mvc 脚手架控制器和视图

【讨论】:

  • 这个答案也可以,但由于 ViewBag 的解释,我把上面的帖子作为答案。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2019-01-08
  • 2012-03-14
  • 2012-03-25
相关资源
最近更新 更多