我想在一个视图中使用两个模型,并查看父视图模型。
我有两个模型:
public class Blogg
{
public int ID { get; set; }
public string Blogg_name { get; set; }
public string Message { get; set; }
public string Blogg_subject { get; set; }
private DateTime _Blogg_date = DateTime.Now;
public DateTime Blogg_date
{
get
{
return _Blogg_date;
}
set
{
_Blogg_date = value;
}
}
}
和
public class Dish
{
public int ID { get; set; }
public string Title { get; set; }
public string MainIngredient { get; set; }
public string Cooking { get; set; }
public string Drink { get; set; }
public string Ingredient { get; set; }
public string Type { get; set; }
}
这是我的父视图模型
public class DishBlogg
{
public Blogg Blogging { get; set; }
public Dish Dishing { get; set; }
}
如何在我的视图中显示结果(Home/index.cshtml)?
@model IEnumerable<XXXXXX.Models.DishBlogg>
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item.Blogging.Blogg_date)
@Html.DisplayFor(modelItem => item.Blogging.Blogg_subject)
@Html.DisplayFor(modelItem => item.Blogging.Blogg_name)
@Html.DisplayFor(modelItem => item.Blogging.Message)
}
我可以用这个(当然)展示一个模型:
@model IEnumerable<XXXXXX.Models.Blogg>
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item.Blogg_date)
@Html.DisplayFor(modelItem => item.Blogg_subject)
@Html.DisplayFor(modelItem => item.Blogg_name)
@Html.DisplayFor(modelItem => item.Message)
}
但是我如何显示两者(与dishblog)?
我得到这个错误:传入字典的模型项是类型'System.Data.Entity.Infrastructure.DbQuery 1[XXXX.Models.Blogg]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[XXXX.Models.DishBlogg]'
这里是HomeController的索引,我从数据库中挑选出最后一个帖子。我想对菜做同样的事情,并在同一个视图中呈现两者
public ActionResult Index()
{
var lastblogg = db.Bloggs.OrderByDescending(o => o.ID).Take(1);
return View(lastblogg);
}
您需要调整您的视图模型:
public class DishBlogg
{
public IEnumerable<Blogg> Blogging { get; set; }
public IEnumerable<Dish> Dishing { get; set; }
}
,然后尝试添加一个.ToList()
调用来急切地执行控制器中的查询:
public ActionResult Index()
{
var model = new DishBlogg
{
Blogging = db.Bloggs.OrderByDescending(o => o.ID).Take(1).ToList(),
Dishing = db.Dishes.OrderByDescending(o => o.ID).Take(1).ToList(),
}
return View(model);
}
,然后在你的视图中:
@model XXXXXX.Models.DishBlogg
@foreach (var blog in Model.Blogging)
{
...
}
@foreach (var blog in Model.Dishing)
{
...
}
我认为你的问题很清楚。
你的模型是一个碟子博客,但你正在传递一个博客
试试这个:
public ActionResult Index()
{
var lastblogg = db.Bloggs.OrderByDescending(o => o.ID).Take(1).FirstOrDefault();
var list = new List<DishBlogg>();
list.Add(new DishBlogg(){Blog = lastblog});
return View(list);
}
如果你想传递视图模型"DishBlogg"给你的视图,你需要从视图的模型声明中删除IEnumerable
在您的视图中,您正在使用@model IEnumerable<XXXXXX.Models.DishBlogg>
,这表明视图所期望的模型是DishBlogg的IEnumerable类型。
然而,在控制器中,你正在传递一个类型为DishBlogg的对象作为模型返回视图(viewModel);因此出现了错误。
将视图更改为@model XXXXXX.Models.DishBlogg
或者改变你的视图模型返回一个列表并传递一个IEnumerable的DishBlogg作为模型到控制器
中的视图所以我们不用@model IEnumerable<XXXXXX.Models.DishBlogg>
使用@model <XXXXXX.Models.DishBlogg>
将视图模型类更改为
public class DishBlogg(Blogg blogg, Dish dish)
{
this.LastBlogg = blogg;
this.LastDish = dish;
}
public Blogg LastBlogg { get; private set; }
public Dish LastDish { get; private set; }
填充视图模型并将其传递给视图
public ActionResult Index()
{
var lastblogg = db.Bloggs.OrderByDescending(o => o.ID).Take(1);
var lastdish = db.Bloggs.OrderByDescending(o => o.ID).Take(1);
var viewModel = new DishBlogg(lastblogg , lastdish );
return View("Index", viewModel);
}