2017-07-07 59 views
0

我有一個模型,如下所示:MCV核心DROPDOWNLIST存儲過程

public partial class RoutePartner 
{ 
    public Guid Id { get; set; } 
    [Required] 
    public Guid PartnerId { get; set; } 
    [Required] 
    public string RouteCompany { get; set; } 
} 

的PARTNERID來自於具有標識和名稱的另一個表。我正在嘗試構建我的CRUD表單,以加載合作伙伴列表並將它們提供給表單。這是在MVC Core中執行此操作的最佳方法?我看到很多.NET示例,但沒有一個用於CORE。

最後一點是合作伙伴下拉應由存儲過程填充。

感謝 丹

回答

0

您的類並不一定是相同的數據庫。爲什麼不能有一個名爲Partner的類,它具有ParnterID和PartnerName?在RoutePartner類中有一個合作伙伴屬性,而不僅僅是該ID。

Public class SomeViewModel //Used by your view 
{ 
    public RouteParnter {get; set;} 
    public ParnterList List<SelectListItem> {get; set;} 

public static List<SelectListItem> PopulateDropdown() 
    { 
     List<SelectListItem> ls = new List<SelectListItem>(); 
     DataTable someTable = Database.LoadParnters(); // Database is your data layer 
     foreach (var row in someTable.Rows) 
     { 
      ls.Add(new SelectListItem() { Text = row["PartnerName"].ToString();, Value = row["PartnerID"].ToString(); }); 
     } 
     return ls; 
    } 
} 

public partial class RoutePartner 
{ 
    public Guid Id { get; set; } 
    [Required] 
    public Partner SomePartner { get; set; } 
    [Required] 
    public string RouteCompany { get; set; } 



    public RouteParnter(Guid id) 
    { 
    DataRow returnedRow = Database.LoadRouteParnter(id); 
    Id = id; 
    // Assuming your DataRow returned has all the info you need. 
    RouteCompany = row["RouteCompany"]; 
    SomePartner = new Partner(); 
    SomePartner.PartnerId = row["PartnerID"]; // cast to guid, just example 
    SomePartner.PartnerName = row["PartnerName"].ToString(); 

    } 
    } 

    public class Partner 
    { 
     public Guid PartnerId { get; set; } 
     public string PartnerName { get; set; } 

    } 

我會鬆散地耦合數據層。您可以使用ADO.NET或任何其他方式與數據庫進行通信。我通常通過創建一個參數化的構造函數(比如說帶一個ID來加載)來調用數據層。數據層返回一個DataTable,DataRow,DataSet或一個自定義對象。在構造函數中,填充RouteParnter對象的值。同樣,你可以在ViewModel中有一個List。

+0

好主意,比我想的要好。我將如何填充Model RoutePartner?另外我還不確定如何向合作伙伴展示合作伙伴。 – Dann055

+0

更新了一下。我沒有包含數據層,或者你將如何使用下拉菜單。基本上從數據層返回數據,將其加載到實體層中,並有一個單獨的ViewModel。 – james31rock

+0

再次感謝您的幫助。我不明白Database.LoadRoutePartner(id)方法。那是我寫的東西,因爲Database.LoadRoutePartner()在Database類中不存在。 – Dann055

0

我想提供一個如何解決此問題的快速更新。我最終爲EF創建了一個PartnerContext。一旦創建完成,在需要訪問列表的控制器中,我將PartnerContext.ToList()放入ViewBag中,然後使用ASP幫助程序加載列表。