【问题标题】:How do I view the parent view model MVC3 C#?如何查看父视图模型 MVC3 C#?
【发布时间】:2011-09-24 14:54:59
【问题描述】:

我想在一个视图中使用两个模型并查看了父视图模型。

我有两个模型:

 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)

    }

但是我如何显示两者(使用 DishBlogg)?

我收到此错误:传入字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery1[XXXX.Models.Blogg]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[XXXX.Models.DishBlogg]”

编辑:

这里是 HomeController 的索引,我从数据库中挑选出最后一篇文章。我想对这道菜做同样的事情,并在同一个视图中呈现两者

 public ActionResult Index()
        {

            var lastblogg = db.Bloggs.OrderByDescending(o => o.ID).Take(1);

            return View(lastblogg);
        }

【问题讨论】:

  • 你能分享一些你的控制器代码吗?将模型传递给视图的部分。
  • @siride:如果您发现拼写错误,只需编辑问题。没有必要这么粗鲁恕我直言
  • @Smasher:我不认为我是粗鲁的......

标签: c# asp.net-mvc asp.net-mvc-3 viewmodel


【解决方案1】:

你需要调整你的视图模型:

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)
{
    ...
}

【讨论】:

    【解决方案2】:

    我认为你的问题很清楚。

    您的模型是 DishBlog,但您传递的是 Blogg

    试试这个:

    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);
            }
    

    【讨论】:

      【解决方案3】:

      如果要将视图模型“DishBlogg”传递给视图,则需要从视图中的模型声明中删除 IEnumerable

      在您的视图中,您使用的是@model IEnumerable&lt;XXXXXX.Models.DishBlogg&gt;,这表明视图期望的模型是 DishBlogg 的 IEnumerable 类型。

      但是,在控制器中,您将 DishBlogg 类型的对象作为模型返回 View(viewModel);因此错误。

      要么将视图更改为@model XXXXXX.Models.DishBlogg

      或更改您的视图模型以返回一个列表并将 DishBlogg 的 IEnumerable 作为模型传递给控制器​​中的视图

      所以而不是这个@model IEnumerable&lt;XXXXXX.Models.DishBlogg&gt;
      使用这个@model &lt;XXXXXX.Models.DishBlogg&gt;

      将您的视图模型类更改为此

      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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 2018-07-16
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多