【问题标题】:Inner Join table listing in ASP.NET MVCASP.NET MVC 中的内部联接表列表
【发布时间】:2021-03-09 17:48:43
【问题描述】:

我正在尝试使用内部联接列出 2 个表中的项目。我认为有一个问题。请帮帮我。

这是我得到的错误

传入字典的模型项的类型为“PersonelGiriş_MVC.Models.ortaktablo”,但此字典需要类型为“System.Collections.Generic.List`1[PersonelGiriş_MVC.Models.ortaktablo]”的模型项。

模型类:

public class personel
{
    public int id { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string isim { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string soyisim { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string tcno { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    [DataType(DataType.DateTime, ErrorMessage = "Lütfen doğum tarihinizi doğru bir şekilde giriniz.")]
    public int dogumtarihi { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string dogumyeri { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string cinsiyet { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string kangrubu { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    public string adres { get; set; }
    [Required(ErrorMessage = "Bu alan boş geçilemez!")]
    [DataType(DataType.PhoneNumber, ErrorMessage = "Lütfen telefon numaranızı doğru bir şekilde giriniz.")]
    public string telno { get; set; }
    public string resimismi { get; set; }

    public virtual List<saat> saatler { get; set; }
}

public class saat
{
    public int saatid { get; set; }
    public string girissaati { get; set; }
    public string cikissaati { get; set; }
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd'/'MM'/'yyyy}")]
    public DateTime? kayittarihi { get; set; }
    //her giriş/çıkış saati yanlızca bir ait olabilir.
    public virtual personel personel { get; set; }
}

public class ortaktablo
{
    public string p_isim { get; set; }
    public string p_soyisim { get; set; }
    public string p_girissaati { get; set; }
    public string p_cikissaati { get; set; }
    public List<ortaktablo> toplamtablo { get; set; }
}

控制器:

var secim = (from saat_veri in db.saatler
             join per_veri in db.personeller on saat_veri.personel.id equals per_veri.id
             select new ortaktablo { p_isim = per_veri.isim, p_soyisim = per_veri.soyisim, p_girissaati = saat_veri.girissaati, p_cikissaati = saat_veri.cikissaati });

var Model = new ortaktablo { toplamtablo = secim.ToList() };
return View(Model);

查看:

@model List<PersonelGiriş_MVC.Models.ortaktablo>


 @if (Model != null)
 {
       foreach (var item in Model)
       {
          <tr class="info">
              <td>@Html.DisplayFor(i => item.p_isim)</td>
                  <td>@Html.DisplayFor(i => item.p_soyisim)</td>
                  <td>@Html.DisplayFor(i => item.p_girissaati)</td>
                  <td>@Html.DisplayFor(i => item.p_cikissaati)</td>
               </tr>
        }
  }

【问题讨论】:

  • 您了解ortaktabloList&lt;ortaktablo&gt; 之间的区别吗?
  • 不是问题,但您确定需要加入吗?我觉得导航属性在你的情况下应该足够了。
  • 是的,我认为我需要加入,因为有两个表有关系。

标签: c# asp.net-mvc .net-core razor


【解决方案1】:

这就是您创建传递的模型的方式 var Model = new ortaktablo { toplamtablo = secim.ToList() }; 所以你需要在你的 foreach 中使用Model.toplamtablo,因为那是你设置列表的地方

       foreach (var item in Model.toplamtablo)
       {
          <tr class="info">
              <td>@Html.DisplayFor(i => item.p_isim)</td>
                  <td>@Html.DisplayFor(i => item.p_soyisim)</td>
                  <td>@Html.DisplayFor(i => item.p_girissaati)</td>
                  <td>@Html.DisplayFor(i => item.p_cikissaati)</td>
               </tr>
        }

【讨论】:

  • 非常感谢。它就像我想要的那样工作。
【解决方案2】:

您将单个对象作为模型传递给视图,而您的视图是强类型的集合。您需要更改视图或操作以匹配类型。看起来将要传递一个对象。

将视图代码更改为:

@model PersonelGiriş_MVC.Models.ortaktablo

@if (Model != null)
 {
       
          <tr class="info">
              <td>@Html.DisplayFor(i => ip_isim)</td>
              <td>@Html.DisplayFor(i => i.p_soyisim)</td>
              <td>@Html.DisplayFor(i => i.p_girissaati)</td>
              <td>@Html.DisplayFor(i => i.p_cikissaati)</td>
           </tr>            
  }

【讨论】:

  • 我尝试过,但仍然出现此错误:CS1579:foreach 语句无法对“PersonelGiriş_MVC.Models.ortaktablo”类型的变量进行操作,因为“PersonelGiriş_MVC.Models.ortaktablo”不包含'GetEnumerator'
  • @ÖmerFarukArslan 你看到我发布的代码了吗,它没有 foreach
  • 是的,我尝试过,但页面中没有显示结果。 db中有数据。
  • @ÖmerFarukArslan 你需要调试代码然后
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2014-05-22
  • 2011-07-05
  • 2021-03-04
  • 2017-03-24
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多