c# - 如何将两个模型添加到一个视图?
问题描述
我有两个模型,一个票和一个叫做评论。我在票和评论之间有一对多的关系。我想要做的是能够将来自我的两个模型的数据用于一个视图。我应该能够显示来自票证和评论的数据。
如您所见,我已将 @model.Models.Ticket 放在 Ticket 的视图中,以便从票证到视图中获取数据。
@model WebApplication20.Models.Ticket
@{
Layout = "_Dashboard";
var title = "About Ticket";
}
<html>
<body id="page-top">
<div class="card mx-auto" style="width: 18rem;">
<div class="card-header">
<h4><strong>Ticket Status</strong></h4> Created @Model.TicketCreated
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item"><strong>Name:</strong> </li>
<li class="list-group-item"><strong>Descripton:</strong></li>
<li class="list-group-item"><strong>Priority:</strong> @Model.TicketPriority</li>
<li class="list-group-item"><strong>Type:</strong> @Model.TicketType</li>
<li class="list-group-item"><strong>Status:</strong> @Model.TicketStatus</li>
</ul>
</div>
<div class="card shadow mx-auto m-3" style="width: 18rem;">
<div class="card-header">
<h4><strong>Comments</strong></h4>
</div>
@*<div class="form-group row">
<div class="col-4">
<label asp-for=""></label>
</div>
<div class="col-8">
<textarea asp-for="" rows="5" style="resize:none;" class="form-control"></textarea>
<span asp-validation-for="" class="text-danger"></span>
</div>
</div>*@
</div>
我还测试了制作视图模型。
public class CommentVM
{
public Ticket Ticket { get; set; }
public Ticket Ticket_Id { get; set; }
public IEnumerable<SelectListItem> ProjectList { get; set; }
public IEnumerable<SelectListItem> StatusList { get; set; }
public string TicketStatus { get; set; }
public DateTime TicketCreated { get; set; }
public string TicketPriority { get; set; }
public string TicketType { get; set; }
// Comment
public Comments Comments { get; set; }
public Comments Comment_Id { get; set; }
public string Message { get; set; }
}
但问题是我需要一张独特的票才能看到正确的值。因此我在我的控制器中使用以下代码。根据我的测试,我无法通过向控件添加视图模型来获得视图的唯一值?
这是控制器,我希望我的视图显示来自票证和评论的数据。
public IActionResult Info(int id)
{
if (id == null)
{
return NotFound();
}
Ticket obj = _db.Tickets.FirstOrDefault(t => t.Ticket_Id == id);
return View(obj);
}
解决方案
只需创建一个新类来保存 Ticket 和 IEnumerable 列表。
public class TicketWithComments
{
public Ticket Ticket {get;set;}
public IEnumerable<Comment> Comments {get;set;}
}
然后在您的控制器中分配来自 Db 的值。
TicketWithComments t=new TicketWithComments();
t.Ticket=Ticket obj = _db.Tickets.FirstOrDefault(t => t.Ticket_Id == id);
//I assume that there is a TicketId attribute in Comment class.
t.Comments=_db.Comments.Where(f=>f.TicketId==id);
return View(t);
在您看来,您现在可以使用我们的新类。
@model TicketWithComments
要获得票证的评论,您可以使用 foreach。
foreach (var comment in Model.Comments)
{
//show comment here.
}
或者,您可以在视图中使用元组,如下所述:https ://stackoverflow.com/a/13823027/1431001
推荐阅读
- javascript - 如何将对象推送到具有这种结构的数组?
- javascript - 在选择时更改背景照片
- r - 根据另一列中的唯一值汇总一列中的值
- python - 为大数据部分训练逻辑回归模型
- c# - 解析大文本文件时如何提高性能 - StreamReader + Regex
- php - 如果在保存子模型时遇到错误,Laravel 回滚保存的更改
- apache - 本地虚拟主机总是导致在 Firefox 中进行搜索查找
- javascript - 当我使用 javascript 从网站保存图像时,如何将图像保存在我想要的本地路径中?
- javascript - 如何根据选择的 tr 切换手风琴?
- sql - 查询 Azure SQL 数据库中的所有数据库用户,以及他们拥有的任何角色