【问题标题】:Displaying separate tables in the same MVC-view在同一个 MVC 视图中显示单独的表
【发布时间】:2014-04-16 10:31:48
【问题描述】:

我用实体创建了两个不同的表。 代码如下所示:

public class Frisorer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Scheman> Schema { get; set; }
    }

    public class Scheman
    {
        public int Id { get; set; }
        public DateTime Schemat { get; set; }
        public virtual Frisorer frisorer { get; set; }
    }

我的上下文文件:

 public class Context : DbContext
{
    public Context()
    : base("DefaultConnection")
{
}
    public DbSet<Frisorer> Frisorer { get; set; }
    public DbSet<Scheman> Scheman { get; set; }
}

这些表可以通过在它们之间建立关系的键来创建。 我现在想要的是能够在 MVC 的同一视图中显示我的 frisor 的名称/ID 及其模式。但是当我尝试添加视图时,我只能选择带有 Frisorer OR Schemas 的强类型视图...如何将两个表一起显示?

编辑:

我创建了一个新类,其中我封装了其他两个类:

public class Frisorer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Scheman> Schema { get; set; }
    }

    public class Scheman
    {
        public int Id { get; set; }
        public DateTime Schemat { get; set; }
        public virtual Frisorer frisorer { get; set; }
    }

    public class BigViewModel
    {
        public List<Frisorer> Frisorer { get; set; }
        public List<Scheman> Scheman { get; set; }
    }

还有控制:

public ActionResult hopp()
        {

            BigViewModel bv = new BigViewModel();
            bv.Frisorer = (from o in cont.Frisorer select o).ToList();
            bv.Scheman = (from or in cont.Scheman select or).ToList();
            return View(bv);

        }

我创建了一个视图,在该视图中我选择 BigViewModel 作为强类型,并将列表作为脚手架。 得到这个错误: 传入字典的模型项的类型为“MvcApplication3.Models.BigViewModel”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[MvcApplication3.Models.BigViewModel]”的模型项

【问题讨论】:

    标签: c# entity-framework model-view-controller


    【解决方案1】:

    您得到了异常,因为当视图需要 BigViewModel 的集合时,您将单个 object 传递给视图。

    尝试将视图中的模型绑定更改为:@model BigViewModel 而不是 @model IEnumerable&lt;BigViewModel&gt;,然后迭代 Model 中的集合:

    @foreach(var frisor in Model.Frisorer)
    {
       //do stuff
    }
    
    @foreach(var schema in Model.Scheman)
    {
       //do stuff
    }
    

    【讨论】:

      【解决方案2】:

      您只需要将视图中的模型从@model IEnumerable&lt;BigViewModel&gt; 更改为@model BigViewModel,然后遍历FrisorerScheman,如下所示:

      @model BigViewModel
      
      <ul>
          @foreach(var item in Model.Frisorer) 
          {
              <li>@item.Id - @item.Name</li>
          }
      </ul>
      
      <ul>
          @foreach(var item in Model.Scheman) 
          {
              <li>@item.Id - @item.Schemat</li>
          }
      </ul>
      

      【讨论】:

      • 嗨@BiffBaffBoff,如何在同一个表中显示2个表。?。这可能吗?
      【解决方案3】:

      创建第三个类,某种 ViewModel/Wrapper,它将封装您需要的所有内容。然后在您的视图中引用它。

      【讨论】:

      • 您介意在答案中告诉我如何做到这一点吗?一直在网上寻找,但我看到的大多数网站都要求我改变一切..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多