【问题标题】:ViewModel MVC making a DropDown List with info from other modelViewModel MVC 使用来自其他模型的信息制作下拉列表
【发布时间】:2018-08-06 14:52:36
【问题描述】:

我是 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; }
}

我尝试了一些 ViewModel 样式,但我不知道如何正确地做到这一点。
在添加披萨的视图中,我想通过下拉列表添加将交付披萨的送货员的姓名。
这个项目就像一个管理披萨的网页。

【问题讨论】:

  • 如果您需要帮助,您需要向我们展示更多信息。
  • 所以@Lewis86,这个想法是为了知道谁在送披萨,每个披萨都有一个送货员,这就像管理订单和谁在送餐的门户网站。快完成了,但我不知道如何加入比萨饼和送货员,有一个包含所有字段的比萨饼页面和一个送货员页面,我正在使用实体

标签: c# .net asp.net-mvc model-view-controller


【解决方案1】:

外卖员的选择从哪里来?我猜这是存储在数据库中而不是枚举中。如果是这种情况,您的视图模型可能如下所示:

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 应该是一个枚举而不是字符串属性,因为通常有一组预定义的大小可供用户选择,而不是允许用户输入他们想要的任何内容。

【讨论】:

  • 如果您将风味视为食谱,那么它也可以是枚举。特殊成分可以是字符串。
  • 我正在使用 Postgre 来保存所有交付选项、尺寸和风味我现在已经放置了一个带有选项的下拉列表,但我将来会对风味做同样的事情,因为现在只有送货员,尺码随意
【解决方案2】:

你快到了。据我了解,一份披萨只需要一名送货员即可送达。所以你可以这样做:

[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;}
}

当与 Entity Framework (Core) 等强大的 ORM 结合使用时,您可以做很多事情。如果您需要,这里有更多信息: https://www.learnentityframeworkcore.com/conventions/one-to-many-relationship

【讨论】:

  • 谢谢兄弟,我正在使用实体,但这是第一次,我会阅读该链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多