在一个视图MVC 4中添加来自两个表的数据

时间:2013-07-23 11:49:39

标签: c# asp.net-mvc asp.net-mvc-4

我正在尝试在一个视图中添加来自两个不同表的数据。这里的somne​​代码: 视图模型代码

public class ProductIndexData
{
    public IEnumerable<Order> Orders { get; set; }
    public IEnumerable<Magnet> Magnets { get; set; }
    public IEnumerable<Map> Maps { get; set; }
    public IEnumerable<Portrait> Portraits { get; set; }
    public IEnumerable<Tablet> Tablets { get; set; }
    public IEnumerable<Other> Others { get; set; }
}

控制器代码:

public ActionResult Index()
    {
        ProductIndexData products = new ProductIndexData();
        products.Magnets = (from o in db.Magnets select o).ToList();
        return View(products);
    }

观点:

@model List<SvLaserIS.ProductIndexData>
@{
    ViewBag.Title = "Product";
}

<h2>Product</h2>
<table>
@foreach (var item in Model) {
    foreach(SvLaserIS.Models.Magnet magnet in item) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => magnet.Count)
        </td>
        <td>
            @Html.DisplayFor(modelItem => magnet.Model)
        </td>
        <td>
            @Html.DisplayFor(modelItem => magnet.Color)
        </td>
        <td>
            @Html.DisplayFor(modelItem => magnet.FullPrice)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new {  }) |
            @Html.ActionLink("Details", "Details", new {  }) |
            @Html.ActionLink("Delete", "Delete", new {  }) 
        </td>
    </tr>
    }
}
    </table>

编译后我在第二个foreach循环中遇到错误,因为它表示它不包含GetEnumerator的定义。寻求帮助:/

3 个答案:

答案 0 :(得分:4)

好像你只是忘了指定要迭代item.Magnets属性:

foreach(SvLaserIS.Models.Magnet magnet in item.Magnets)

答案 1 :(得分:0)

我解决了。只需在视图中传递单个对象,并为视图中的每个表使用单个foreach循环。谢谢大家的回应。

答案 2 :(得分:0)

In model
--------

simple example 


 public class subdomain
   {

       public string Function { get; set; }
       public string SubDomain { get; set; }
       public string URL { get; set; }
       public Guid DomainId { get; set; }

   }
   public class emailserver
   {
       public string Priority { get; set; }
       public string MailExchanger { get; set; }
       public Guid DomainId { get; set; }
   }


  public class  tablevalues
   {
       public List<emailserver> emailserver { get; set; }

       public List<subdomain> subdomain { get; set; }
   }



in controller
-------------
tablevalues dto=new tablevalues();
dto.subdomain=from  p in context.tablename1  select p
dto.emailserver=from q in context.tablename2 select q
return View(dto);


in .cshtml
----------


 @model MVCDropDownlist.Models.tablevalues 

@{
    Layout = null;
}


 <table width="100%" border="0" cellspacing="0" cellpadding="0" id="tbsub" style="visibility: @(Model.subdomain.Count==0? "hidden" : "visible") " >
            <thead>
                <tr>
                    <td colspan="3">
                         <h1>Web Settings</h1>
                    </td>
                </tr>
                <tr>
                    <th>Web Sub Domain</th>
                    <th>Function</th>
                    <th>Points To</th>
                </tr>
            </thead>
            <tbody>
                @if (Model != null && Model.subdomain.Count() > 0)
                {
                    foreach (var item in Model.subdomain)
                    {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.SubDomain)
                        </td>
                        <td>@Html.DisplayFor(modelItem => item.Function)</td>
                        <td>@Html.DisplayFor(modelItem => item.URL)</td>
                    </tr>

                    }
                }
            </tbody>

        </table>
        <!--tableGrid -->
    </div>

    <!--rightSection -->
</div>

<div class="rightSection">

    <div class="tableGrid">
        <table width="100%" border="0" cellspacing="0" cellpadding="0" id="tbess" style="visibility: @(Model.emailserver.Count==0? "hidden" : "visible") ">
            <thead>
                <tr>
                    <td colspan="2">
                         <h1>Email Server Settings</h1>
                    </td>
                </tr>
                <tr>
                    <th>Mail Exchanger</th>
                    <th>Priority</th>
                </tr>
            </thead>
            <tbody>
                @if (Model != null && Model.emailserver.Count() > 0)
                {
                    foreach (var item in Model.emailserver)
                    {

                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.MailExchanger)
                        </td>
                        <td>@Html.DisplayFor(modelItem => item.Priority)</td>
                    </tr>

                    }
                }

            </tbody>

        </table>