ViewModel MVC使用来自其他模型的信息制作下拉列表



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

最新更新