【问题标题】:Pass Custom View Object from Controller to View将自定义视图对象从控制器传递到视图
【发布时间】:2017-11-06 09:31:00
【问题描述】:

我有一个简单的问题。在我的控制器中,我加入两个表并返回如下:

data = ...
select new { Contacts = item, Applications = items, Answers = j } 

这工作正常。我得到了我想要的:例如62 个具有我想要的属性的数据对象。

但是在视图中我如何访问这些数据点集呢?

简单的@model dynamic 不工作?一定有办法做到这一点。

【问题讨论】:

  • 你通过selectLINQ 提供匿名类型,你想用它来实现什么?
  • 对于自定义对象,您可以使用对象类型
  • @TetsuyaYamamoto 我想要我加入的所有 3 个表的结果,这就是我使用 new {} 的原因 ...所有这些表都是同一模型的一部分...所以我创建了一个数据库上下文对象,只需加入表并使用新的 {} 返回表的左连接
  • @SunnyJangid where...在视图模型中?
  • 创建一个包含您需要的属性的视图模型并使用select new Youviewmodel { ... } 并将其传递给视图,而不是匿名对象

标签: c# asp.net-mvc


【解决方案1】:

最好的方法是创建一个 ViewModel,其中包含您需要在视图中显示的所有属性。

 public class DataViewModel {
      public Contacts {get;set}
      public Application {get;set;}
      public Answers {get;set;}
   }

创建一个“DataViewModel”列表

List<DataViewModel> Datas = new List<DataViewModel>();

完成此操作后,您必须从您通过简单地使用 foreach 循环创建的“数据”变量中获取每个元素的值,然后分配控制器中每个元素的值。

foreach (var instance of data) {
// Assign those values here
} 

您必须将数据列表(ViewModel)从您的控制器传递给您的视图,如下所示:

return View(Datas);

并像这样在视图中调用 ViewModel 列表:

@model IEnumerable<models.DataViewModel>

【讨论】:

    【解决方案2】:

    创建一个“伞”模型,例如:

    public DataModel
    {
       public Contacts contacts {get;set}
       public Application  applications {get;set;}
       public Answers  answers {get;set;}
    }
    

    在控制器上:

    select new DataModel(){ Contacts = item, Applications = items, Answers = j }
    

    并在查看:

    @model DataModel
    

    【讨论】:

    • 我无法将类型隐式转换为...dbset
    • 我想你的意思是public Contacts Contacts { get;set };
    • @StephenMuecke CS0029 C# 无法将类型 x 隐式转换为 System.Data.Entity.DbSet ....有什么办法可以解决这个问题?
    • @RajeshRonaldo,您还没有向我们展示引发该错误的代码(但我假设您已错误地声明了模型 - 对于上述 apomene 的模型,它需要为 IEnumerable&lt;DataModel&gt; data = ....select new DataModel(){ contacts = item, applications = items, answers = j }跨度>
    • 您还没有告诉我们itemitemsjtype 是什么,所以您需要调整视图模型类型以适应。
    【解决方案3】:

    public DataModel
    {
       public Contacts {get;set}
       public Application {get;set;}
       public Answers {get;set;}
    }
    

    控制器

    DataModel model = new DataModel();
    model.Contacts  = items;
    model.Application = item;
    model.Answers= items;
    return View(model);
    

    查看

    @model DataModel
    
    // will get all three tables data here
    
    @Model.Contacts 
    @Model.Application
    @Model.Answers
    

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多