2017-07-31 205 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