我有两张表TxtComment
和Login
。
我正在显示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
,它说错误。是查看包更好吗?如果没有,请以强烈的类型视图帮助我。
答案 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" />
}