在单个视图中从模型显示多个表

时间:2014-02-05 09:01:31

标签: c# asp.net-mvc linq

我有两张表TxtCommentLogin

我正在显示Login表中的图片网址和TxtComment表中的评论,其中TxtComment中的用户名等于Login中的用户名。

我正在使用实体框架的Db First方法。

如何将不同表中的这些列连接到一个公共视图?我使用了ViewBag。我得到了一个结果。

控制器

public ActionResult Item(int id)
{  
    FoodContext db = new FoodContext();

    ViewBag.FoodItems = db.FoodItems.Where(row => row.itemid == id);

    ViewBag.TxtComments = (from user in db.TxtComments
                           from ff in db.Logins
                           where ff.username == user.username
                           select new { imgurl = ff.imgurl, txtcmt = user.txtcmt });

    return View();

}

查看

@for(var item in ViewBag.TxtComments)
{
    <div>@item</div>
}

结果为{imgurl=http:/sdfsdf,txtcmt=sfsdfsdf}

我需要每个项目分开。我怎么能够?我尝试使用@item.imgurl,它说错误。是查看包更好吗?如果没有,请以强烈的类型视图帮助我。

1 个答案:

答案 0 :(得分:3)

创建您自己的ViewModel,而不是将模型放在ViewBag

<强>视图模型:

public class ViewModel
{
    public List<ImageComment> ImageComments { get; set; }

    public ViewModel()
    {
        ImageComments = new List<ImageComment>();
    }
}

public class ImageComment
{
    public string ImageUrl { get; set; }
    public string Comment { get; set; }
}

控制器操作:

public ViewResult Item(int id)
{
    FoodContext db = new FoodContext();

    List<ImageComment> comments = (from user in db.TxtComments
                                   from ff in db.Logins
                                   where ff.username == user.username
                                   select new ImageComment
                                   { 
                                       ImageUrl = ff.imgurl, 
                                       Comment = user.txtcmt 
                                   }).ToList();

    ViewModel vm = new ViewModel{ ImageComments = comments };     
    return View("MyView", vm);
}

查看:

@model ViewModel

@{
    ViewBag.Title = "Comments";
}

@foreach(ImageComment comment in Model.ImageComments)
{
    <p>@comment.Comment</p>
    <img src="@comment.ImageUrl" alt="img" />
}