【问题标题】:asp.net mvc Join two tables to a single list item in html unordered listasp.net mvc 将两个表连接到 html 无序列表中的单个列表项
【发布时间】:2015-09-08 11:56:04
【问题描述】:

我已经成功地在 webforms 中使用带有两个表的 sql 内连接将两个表连接到一个 html 无序列表。

我正在使用 Asp.net MVC 5 Entityframework 6

我正在尝试在 MVC 中加入相同的两个表以再次输出单个 html 无序列表。

第一个表名为 team,列 id,第二个表名为 teamgallery,列 teamID。 team.id 和 teamgallery.teamID 的值相等。

在控制器中:

dynamic dmodel = new ExpandoObject();
dmodel.Teamre = (from pd in db.teams
                join od in db.teamgalleries on pd.id equals od.teamID
                where pd.Catresales == "yes"
                select new 
                {
                    pd.id,
                    pd.name,
                    od.picture
                 }).ToList();
return View(dmodel);

在视图中:

<ul>
    @foreach (var teamre in Model.Teamre)
    {
        <li>
            @teamre
        </li>
    }
</ul>

在网络浏览器中,这会返回一个类似这样的列表:

{ id = 1, name = John Doe, 图片 = picture1.jpg }

{ id = 2, name = Jane Doe, picture = picture2.jpg }

如果我将剃须刀代码更改为仅显示名称:

@teamre.name

我会收到这个错误

“应用程序”中的服务器错误。 “对象”不包含“名称”的定义

即使我写了也会显示错误

name = pd.name, 

【问题讨论】:

  • 不要声明dynamic,这里没有理由,直接使用var即可。另外,Teamre 在类ExpandoObject 中是如何定义的?

标签: asp.net entity-framework join asp.net-mvc-5 entity-framework-6


【解决方案1】:
var dmodel = new ExpandoObject();
        dmodel.Teamre = (from pd in db.teams
                         join od in db.teamgalleries on pd.id equals od.teamID
                         where pd.Catresales == "yes"
                         select new 
                         {
                           pd.id,
                           pd.name,
                           od.picture
                         }
                         ).ToList();

剃须刀

<ul>
    @foreach (var teamre in Model.Teamre)
    {
        <li>
            @teamre.name
        </li>
    }
</ul>

应该这样做

【讨论】:

    【解决方案2】:
    <ul>
    @foreach (var teamre in dmodel.Teamre)
    {
        <li>
            @teamre.name
        </li>
    }
    

    我认为您使用错误的集合进行迭代...请参阅上面的代码更改。

    【讨论】:

      【解决方案3】:

      谢谢,为名称和图片添加 ViewModel 解决了这个问题。

          public string picture { get; set; }
          public string name { get; set; }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 2019-07-11
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2015-11-24
        • 1970-01-01
        相关资源
        最近更新 更多