MCV核心下拉列表存储过程

时间:2017-07-07 17:58:54

标签: stored-procedures drop-down-menu asp.net-core

我的模型看起来如下:

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

partnerId来自另一个具有Id和Name的TABLE。我正在尝试构建我的CRUD表单以加载合作伙伴列表并使其可用于表单。这是在MVC Core中执行此操作的最佳方法吗?我看到很多.NET示例但没有CORE。

最后一点是伙伴下拉应该由存储过程填充。

由于 丹

2 个答案:

答案 0 :(得分:0)

您的课程不必与您的数据库相同。为什么不让一个名为Partner的类具有ParnterID和PartnerName?在您的RoutePartner类中有一个Partner属性,而不仅仅是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。

答案 1 :(得分:0)

我想快速更新一下我是如何解决这个问题的。我最终为EF创建了PartnerContext。一旦创建,在需要访问列表的控制器中,我将PartnerContext.ToList()放入ViewBag,然后使用ASP帮助程序加载列表。