c# - 如何在 ASP.NET MVC 中连接两个模型?
问题描述
我是 ASP.NET MVC 的新手,我正在尝试创建一个存储游泳练习和结果的应用程序。
于是我在 Visual Studio 2019 中创建了应用程序,我已经成功列出、添加、删除和修改游泳结果。这些数据仅存储在一个模型中。但我也想存储练习,但一种练习包括许多练习/练习。所以我假设我需要两个不同的模型类。
所以我创建了这两个类:
实践课:
public class Practice
{
public int Id { get; set; }
public DateTime Date { get; set; }
public List<Drill> Drills { get; set; }
}
钻头类:
public class Drill
{
public int Id { get; set; }
public int? Multiplier { get; set; }
public int Distance { get; set; }
public int? RestTime { get; set; }
public SwimmingStroke SwimmingStroke { get; set; }
public String Equipment { get; set; }
public String Notes { get; set; }
}
SwimmingStroke 是一个枚举,它只存储了 4 种不同的游泳类型。
所以我尝试了这种方式,并使用迁移,Entity Framework 为我生成了数据库表。它还在 Drill 表中添加了一个 Practice_Id,我假设它是外键。之后我创建了 PracticeController。由此,我搭建了索引和详细信息视图。在索引中,我可以显示练习列表,但更重要的是,当我单击详细信息时,我想列出该练习的练习。这就是我卡住的地方。
索引方法很简单
public ActionResult Index()
{
var practices = dbContext.Practices.ToList();
return View(practices);
}
但是在 details 方法中,我无法弄清楚该怎么做。
我的目标是在详细信息视图中显示所选练习的练习列表。
解决方案
正如戴所说,直接在视图中使用实体模型并不是一个好主意。它使事情变得有点混乱,并且您的实体模型并不总是准确地表示您希望用户看到的信息。
我建议按照 PracticeModel 的方式构建一个名为 something 的类(按照惯例,但可以随意命名),其中包含一个 DrillModel 列表。然后选择实践并钻入该模型并将其传递给您的视图。
public class PracticeModel
{
public int Id { get; set; }
public DateTime Date { get; set; }
public List<DrillModel> DrillModels { get; set; }
public PracticeModel()
{
DrillModels = new List<DrillModel>();
}
}
然后,在您的视图中,您可以遍历您的 PracticeModel 的 DrillModel 列表并根据需要显示它们。假设您将拥有多个练习模型,请创建一个显示每个练习模型的局部视图。这使其易于使用,并且您可以在整个网站上重复使用该部分视图。
@model PracticeModel
@if (Model != null)
{
// PracticeModel Details
@for (int i = 0; i < Model.Drills.Count; i++)
{
var drill = Model.Drills[i];
// DrillModel Details
}
}
else
{
//Display Appropriate Html
}
推荐阅读
- python-3.x - 训练后损失和准确率保持不变
- redis - 如何在 Redis 中设置/重置/更改流顶部项目 ID?
- flutter - Flutter - 如何在一行中显示文本和图标?
- html - 如何水平对齐伪元素与元素及其容器
- java - 我们如何在 Sailpoint IIQ 中设置日期范围
- unit-testing - NestJS Jest 测试期待然后最终捕获
- python - 如果行的内容包含特定的子字符串,如何排除 Daraframe 中的列?
- google-classroom - 课堂主题 API 给了我帐户受限错误
- python - 使用 Matplolib 将绘图保存在图像文件中
- react-native - 同时使用抽屉导航和堆栈导航