如何在一个视图中添加两个模型?

时间:2021-06-05 17:36:04

标签: c# asp.net-mvc asp.net-core entity-framework-core

我有两个模型,一个票,一个叫评论。我在评论票之间有一对多的关系。我想要做的是能够将来自我的两个模型的数据用于一个视图。我应该能够显示来自票证和评论的数据。

如您所见,我已将我的 @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);
        }


2 个答案:

答案 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;
相关问题