[英]ViewModel MVC making a DropDown List with info from other model
我是MVC的新手,所以我正在MVC .NET Core中進行項目研究
我有一些困難要做一個視圖模型
楷模:
[Table("Pizzas")]
public class Pizza
{
[Key]
public int id { get; set; }
public string Flavour { get; set; }
public DateTime Date { get; set; }
public string Size { get; set; }
public string Deliveryman { get; set; }
}
public class Deliveryman
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Cellphone { get; set; }
public string Car { get; set; }
}
我嘗試了一些樣式的ViewModels,但是這樣做的方式不正確。
在“查看添加披薩”中,我想添加一個要通過下拉列表發送披薩的送貨員的名字。
該項目就像一個管理比薩餅的網頁。
送貨人員來源有哪些選擇? 我猜這存儲在數據庫中,而不是一個枚舉。 如果是這種情況,您的視圖模型可能如下所示:
public class PizzaViewModel
{
public int id { get; set; }
public string Flavour { get; set; }
public DateTime Date { get; set; }
public string Size { get; set; }
public IEnumerable<SelectListItem> Deliverymen { get; set; }
public int SelectedDeliveryMan { get; set; }
}
DeliveryMen
中每個項目的構建方式如下:
new SelectListItem
{
Value = individualDeliveryMan.Id,
Text = individualDeliveryMan.FullName
});
然后在您看來,您將獲得以下內容:
@model YourProject.PizzaViewModel
...
@Html.DropDownListFor(x => x.SelectedDeliveryMan, Model.DeliveryMen)
...
當數據回傳到您的控制器時,屬性SelectedDeliveryMan
將保存在您的下拉列表中選擇的送貨員的Id
。
在一個不相關的注釋上,我猜想Size
應該是一個枚舉而不是字符串屬性,因為通常會有一組預定義的大小供用戶選擇,而不是允許用戶輸入他們想要的任何內容。
你快到了 據我了解,一個披薩只需要一名送貨員就可以送貨。 因此,您可以執行以下操作:
[Table("Pizzas")]
public class Pizza
{
[Key]
public int id { get; set; }
public string Flavour { get; set; }
public DateTime Date { get; set; }
public string Size { get; set; }
public Deliveryman Deliveryman { get; set; }
}
將這些信息發布到控制器后,將具有您需要找出誰提供披薩的所有信息。
如果您還想獲取反向信息(找出某個送貨員送來的披薩),則可以執行以下操作:
public class Deliveryman
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Cellphone { get; set; }
public string Car { get; set; }
public ICollection<Pizza> Pizzas {get; set;}
}
與功能強大的ORM(例如實體框架(Core))結合使用時,您可以做很多事情。 如果需要,這里有更多信息: https : //www.learnentityframeworkcore.com/conventions/one-to-many-relationship
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.