[英]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.