【问题标题】:For Each Loop using a second database table model in MVC viewFor Each Loop 在 MVC 视图中使用第二个数据库表模型
【发布时间】:2014-10-31 13:54:53
【问题描述】:

我有一个 cshtml 视图链接到我的数据库中一个表的模型的控制器,但我需要为每个循环执行一个引用第二个表的第二个模型的循环。由于无法在页面顶部设置 2 个模型 foreach (var row in model) 将不起作用。

我需要的是这样的东西

@model MVCapp.Models.COOKIE
@using MVCapp.Models;

@{
  ViewBag.Title = "Update";
  ;

  foreach (var row in IEnumerable<MVCapp.Models.COOKIE_JARS)
  {
     some code 
  }
}

<h2>Update</h2>

虽然这不是大声的,因为我使用的是变量之类的类型。所以我要问的是是否有办法将 type:IEnumerable&lt;MVCapp.Models.COOKIE_JARS 设置为变量或第二个模型,或者是否有一种完全替代的方法可以通过我试图尝试的第二个数据库表实现这种循环。

【问题讨论】:

  • 创建一个具有 2 个属性的视图模型来封装您的 2 个模型或使您的模型成为 Tuple&lt;Model1,Model2&gt;
  • 哦,使用元组作为模型,从来没有想过。有点脏,我喜欢 :)。
  • 使用Tuple&lt;Model,Model2&gt; 方法我得到不包含GetEnumerator 的公共定义使用IEnumerable&lt;Tuple&lt;Model1,Model2&gt;&gt; 似乎没有解决这个问题以及Tuple&lt;IEnumerable&lt;Model&gt;,IEnumerable&lt;Model2&gt;
  • 我通过在我的 foreach 循环中将 Model 更改为 Model.Item1 来解决此问题。
  • @RyeNyeTheWebSiteGuy 老实说,我不建议使用这种技术,如果你使用 ViewModel 会好很多。使用 Tuple 方法很脏,如果你需要来自第三个 Model 的信息会发生什么?

标签: c# asp.net-mvc-4 razor view foreach


【解决方案1】:

最好的方法是创建一个ViewModel,一个包含两个模型信息的类。

您的视图绝不能做任何逻辑或从您的数据库中获取信息,这是控制器的目标。

因此,我们的想法是您的控制器将进行查询,并将数据添加到您的 ViewModel 对象中,然后将其发送到视图。

例子:

您的视图模型:

public class CookieEatersViewModel
{
    public IEnumerable<Cookie> Cookies {get; set;}
    public IEnumerable<Monster> Monsters {get; set;}
}

您的看法:

@model MVCApp.ViewModels.CookieEatersViewModel

<h2>Update</h2>

<p>Use the informations from your ViewModel here</p>

你的控制器:

public ActionResult Index()
{
    CookieEatersViewModel cevm = new CookieEatersViewModel();
    cevm.Cookies = repo.GetCookies();
    cevm.Monsters = repo.GetMonsters();

    return View(vm);
} 

【讨论】:

  • “repo”是做什么的,我收到一个错误,是否需要将程序集添加到文件顶部才能使其工作?
  • "repo" 只是您称为repository 的示例名称,请参阅msdn.microsoft.com/en-us/library/ff649690.aspx。这只是说“从您拥有的任何来源获取数据”的示例。
  • 好吧,我明白了,我对使用 MVC 和 C# 进行专门开发非常陌生,所以我知道的很少。谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2017-06-17
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多