2017-07-31 206 views
1

我有一个“链接”模型。.NET核心MVC ViewModel

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; } 
} 

我想我需要做一个名为“项目”的新模型,然后创建一个ViewModel结合两者。

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

+0

的问题是不明确的。你想将项目存储在另一个数据库中吗?如果是,为什么?这是技术要求吗? 顺便说一下,你应该在外部链接之间建立'Link'和'Project'之间的链接。 你可以看看这个教程:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/。它可能对你有用。 – Atlasmaybe

+0

项目应该是唯一的,并存储在一个单独的表格中。添加新链接时,不同的项目会在下拉列表中显示为选项。 – levis84

+0

您需要使用在“项目”表中找到的记录填充下拉列表,您是否有数据访问层来执行此操作? - 一旦你有了这个,然后将项目的ID存储在“链接”记录中,以便对其进行参考。 –

回答

3

如果我认识你,你想访问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; } 
} 

所以现在,当你生成你的控制器类链接你会得到这样的事情

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

和你的看法会是这个样子

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

希望这有助于

+0

是的,这看起来不错,我会试试看。只有一个问题,无处不在似乎表明ViewModel是这种情况的良好实践,这是真的吗? – levis84

+0

是的,这是真的。 ViewModels允许您将来自一个或多个数据模型或来源的多个实体变形为单个对象,并针对视图的消耗和渲染进行优化。你可以在这里得到很多关于它:http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp-net-mvc-applications/ –

1

试试这个

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脚手架控制器和视图两个类

+1

这个答案也可以,但由于ViewBag的解释,我给出了上面的帖子作为答案。谢谢 – levis84