【问题标题】:MVC display multiple tables in one view?MVC在一个视图中显示多个表?
【发布时间】:2013-10-23 09:47:08
【问题描述】:

我创建了一个父模型 insertBreweryModel.cs:

public class InsertBreweryModel
{
    public IList<Breweries> Breweries { get; set; }

    public IList<BreweryData> BreweryData { get; set; }
}

在我看来,我这样引用它:

@model BaPP.Models.InsertBreweryModel

现在我可以使用 foreach 成功地遍历 Breweries 中的项目,但是我如何使用 displayfor 来显示来自与 item.id 具有相同 id 的其他 tablem 的数据?

@foreach (var item in Model.Breweries)
{
  <tr>
  <td>
    @Html.DisplayFor(modelItem => item.BreweryName)
  </td>
  <td>@Html.DisplayForModel(Model.BreweryData Pseudo: show data from brewerydata.column where id = item.id
  </td>

希望有人能帮忙?

【问题讨论】:

  • ...创建另一个表并在其中使用以下 Model.BreweryData
  • 谢谢;已经有两张表,breweries 和 brewerydata?
  • 好吧,我有你的问题......你有两个表,如果数据来自数据库中的两个不同的表(它们之间应该有一些关系,比如外键),那么你可以很容易导航到其他表的数据。
  • 是的,brewerydata 有外键 breweryId。但不确定如何利用它(MVC 中的新功能,但正在学习):-)

标签: asp.net-mvc razor


【解决方案1】:

对于所有可能有相同问题的人,第一个答案是正确的,但我认为我错过了另一个数据库。我就是这样解决的。

我的模型

namespace BaPP.Models
{
   public class InsertBreweryModel
   {
       public Breweries Breweries { get; set; }

       public BreweryData BreweryData { get; set; }

   }
}

我的控制器

namespace BaPP.Controllers
{
    public class BreweryController : Controller
    {
        private ProjectContext db = new ProjectContext();

        //
        // GET: /Default1/

        public ActionResult Index()
        {            

            var viewModel = from o in db.Breweries join o2 in db.BreweryData on o.BreweryId equals o2.BreweryId where o.BreweryId.Equals(o2.BreweryId) select new InsertBreweryModel { Breweries = o, BreweryData = o2};
            return View(viewModel);
        }

我的看法

@model IEnumerable<BaPP.Models.InsertBreweryModel>

@foreach (var item in Model) {
    <tr>
      <td>
        @Html.DisplayFor(modelItem => item.Breweries.BreweryName)
      </td>
    <td>

       @Html.DisplayFor(modelItem => item.BreweryData.DescriptionText)
    </td>

再次感谢两个 cmets :-)

【讨论】:

    【解决方案2】:

    试试这个:

    @foreach (var item in Model.Breweries)
    {
      <tr>
      <td>
        @Html.DisplayFor(modelItem => item.BreweryName)
      </td>
      <td>
        @Html.DisplayFor(modelItem => item.tableName.tableFieldname)
      </td>
      </tr>
    }
    

    【讨论】:

    • 不,它因 BaPP.Models.Breweries 不包含“BreweryData”的定义而失败?
    • tableName为数据库表名
    【解决方案3】:

    尝试使用类似的东西

    @foreach (var item in Model.Breweries)
    {
    @Html.DisplayFor(model => item.FieldForBreweries)
    
    foreach (var item1 in Model.BreweryData.Where(x => x.Id == item.Id))
    {
    @Html.DisplayForModel(item1)
    }
    }
    

    【讨论】:

    • Thx 生病尝试但突然我遇到了 DB 问题 :-) 典型的所以当我修复时我会得到结果。
    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多