dahund
dahund

Reputation: 352

MVC display multiple tables in one view?

I have created a parent model insertBreweryModel.cs:

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

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

in my view i reference it like:

@model BaPP.Models.InsertBreweryModel

now i succesfully can do iterate through items in Breweries using foreach, but how can i us displayfor to display data from other tablem which has the same id as item.id?

@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>

hope someone can help?

Upvotes: 3

Views: 21467

Answers (3)

dahund
dahund

Reputation: 352

For all whom may have the same issue, the first answer was correct but i was missing the other DB in my view. This is how i solved it.

My model

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

       public BreweryData BreweryData { get; set; }

   }
}

My controller

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

My view

@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>

Again thx for both comments :-)

Upvotes: 5

111
111

Reputation: 1779

Try to use something like that

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

Upvotes: 0

Bhupendra Shukla
Bhupendra Shukla

Reputation: 3904

Try this:

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

Upvotes: 0

Related Questions