我有两个模型,一个票,一个叫评论。我在评论票之间有一对多的关系。我想要做的是能够将来自我的两个模型的数据用于一个视图。我应该能够显示来自票证和评论的数据。
如您所见,我已将我的 @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);
}
答案 0 :(得分:3)
只需创建一个新类来保存 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
答案 1 :(得分:1)
使用 ViewBag
。即ViewBag.Ticket
。所以,在你的控制器中,你可以有
...
Ticket obj = _db.Tickets.FirstOrDefault(t => t.Ticket_Id == id);
ViewBag.Ticket = obj;
...
然后,在视图中,你可以有
Ticket obj = ViewBag.Ticket as Ticket;