C# 使用@model使用同一实体框架类的多个版本
我刚刚建立了一个本地SQL数据库,我正在一个MVC网站上使用EF,我想知道是否有人可以在视图中使用模型。我似乎遇到了麻烦,因为我需要通过使用单独的查询来查询数据库,从而使用同一模型的多个版本。 (这项研究似乎指向LINQ to SQL) 反正 这是我刚才的控制器类C# 使用@model使用同一实体框架类的多个版本,c#,asp.net-mvc,entity-framework,linq,C#,Asp.net Mvc,Entity Framework,Linq,我刚刚建立了一个本地SQL数据库,我正在一个MVC网站上使用EF,我想知道是否有人可以在视图中使用模型。我似乎遇到了麻烦,因为我需要通过使用单独的查询来查询数据库,从而使用同一模型的多个版本。 (这项研究似乎指向LINQ to SQL) 反正 这是我刚才的控制器类 public ActionResult Clubs(int comp) { var dbContext = new DataDBEntities(); switch (comp) { case 1: var que
public ActionResult Clubs(int comp)
{
var dbContext = new DataDBEntities();
switch (comp)
{
case 1:
var query = from clubs in dbContext .Clubs where clubs.League_Table == 1 select clubs;
var PremList = query.ToList();
return View(PremList.ToList());
case 2:
var query1 = from clubs in dbContext .Clubs where clubs.League_Table == 2 select clubs;
var Div1List = query1.ToList();
return View(Div1List.ToList());
case 3:
var query2 = from clubs in dbContext .Clubs where clubs.League_Table == 3 select clubs;
var Div2AList = query2.ToList();
return View(Div2AList.ToList());
case 4:
var Div2BContext = new DataDBEntities();
var query3 = from clubs in dbContext .Clubs where clubs.League_Table == 4 select clubs;
var Div2BList = query3.ToList();
return View(Div2BList.ToList());
case 5:
var query4 = from clubs in dbContext .Clubs where clubs.League_Table == 5 select clubs;
var Div2CList = query4.ToList();
return View(Div2CList.ToList());
case 6:
var query5 = from clubs in dbContext .Clubs where clubs.League_Table == 6 select clubs;
var Div2DList = query5.ToList();
return View(Div2DList.ToList());
default:
break;
}
return View(db.Clubs.ToList());
}
在视图中,我使用@model IEnumerable
@model IEnumerable<SundayCentralAFL.Models.Club>
@{
ViewBag.title = "Clubs Contacts";
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<section id="bodyWrapper">
<section id="leftBody">
<section id="leftAds">
<section class="ads">
<img src="../Pictures/Logo.png" alt="Sunday Central AFL" />
</section>
<section class="ads">
<img src="../Pictures/Logo.png" alt="Sunday Central AFL" />
</section>
</section>
<section id="clubList">
<div id="accordion">
<div>
<h2>Premier Division</h2>
<table class="contactTable">
<tr>
<th>Club Name</th>
<th>Manager Name</th>
<th>Contact Details</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.Club_Name)</td>
<td>@Html.DisplayFor(modelItem => item.Manager)</td>
<td>@Html.DisplayFor(modelItem => item.Contact_Number)</td>
</tr>
}
</table>
</div>
<div>
<h2>Division 1</h2>
<table class="contactTable">
<tr>
<td>Club Name</td>
<td>Manager Name</td>
<td>Contact Details</td>
</tr>
</table>
</div>
<div>
<h2>Division 2A</h2>
<table class="contactTable">
<tr>
<td>Club Name</td>
<td>Manager Name</td>
<td>Contact Details</td>
</tr>
</table>
</div>
<div>
<h2>Division 2B</h2>
<table class="contactTable">
<tr>
<td>Club Name</td>
<td>Manager Name</td>
<td>Contact Details</td>
</tr>
</table>
</div>
<div>
<h2>Division 2C</h2>
<table class="contactTable">
<tr>
<td>Club Name</td>
<td>Manager Name</td>
<td>Contact Details</td>
</tr>
</table>
</div>
<div>
<h2>Division 2D</h2>
<table class="contactTable">
<tr>
<td>Club Name</td>
<td>Manager Name</td>
<td>Contact Details</td>
</tr>
</table>
</div>
</div>
</section>
</section>
<section id="rightBody">
<section class="ads">
<a href="https://www.facebook.com/sundaycentralmedia" alt="Sunday Central AFL" title="Sunday Central AFL" target="_blank"><img src="../Pictures/Logo.png" alt="Sunday Central AFL" /></a>
</section>
<section class="ads">
<img src="../Pictures/Logo.png" alt="Sunday Central AFL" />
</section>
<section class="ads">
<a href="https://www.facebook.com/sundaycentralmedia" alt="Sunday Central AFL" title="Sunday Central AFL" target="_blank"><img src="../Pictures/Logo.png" alt="Sunday Central AFL" /></a>
</section>
<section class="ads">
<img src="../Pictures/Logo.png" alt="Sunday Central AFL" />
</section>
</section>
</section>
@model IEnumerable
@{
ViewBag.title=“俱乐部联系人”;
}
高级师
俱乐部名称
经理姓名
联系方式
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.Club_Name)
@DisplayFor(modelItem=>item.Manager)
@Html.DisplayFor(modelItem=>item.Contact\u编号)
}
第一分部
俱乐部名称
经理姓名
联系方式
第2A分部
俱乐部名称
经理姓名
联系方式
第2B分部
俱乐部名称
经理姓名
联系方式
第2C分部
俱乐部名称
经理姓名
联系方式
第2D分部
俱乐部名称
经理姓名
联系方式
现在,对于每个单独的排名表,我希望使用foreach循环或仅仅是for循环来基于单个查询填充表。如果URL链接中未分配表/错误表,则默认情况下需要运行所有6个查询并生成视图所需的数据
当只使用一个查询并将列表传递给视图时,这看起来确实有效,但我需要传递所有受尊重的分区俱乐部列表,然后在另一端使用
我已经看到了使用viewModels的可能性,但是我不确定这种方法
另一种方法是使用PartialView,但这不会遇到与主视图相同的问题,因为我只能通过一个包含所有俱乐部的整体模型,而不能通过所需俱乐部的单个列表
任何需要的进一步信息都可以询问
谢谢你没有设置ViewData.Model参数,因此@Model目录没有任何数据可处理。此外,我们还可以稍微改进您的代码:
public ActionResult Clubs(int comp)
{
var dbContext = new DataDBEntities();
var query = from clubs in dbContext.Clubs where clubs.League_Table == comp select clubs;
var data = query.ToList();
if (data.Count == 0) ViewData.Model = dbContext.Clubs.ToList();
else ViewData.Model = data;
return View();
}
您的
俱乐部
行动可以减少,如下所示:
public ActionResult Clubs(int comp)
{
using(var context=new DataDBEntities())
{
var query= context.Clubs;
if(comp!=0)//default value
{
query=query.Where(c=>c.League_Table ==comp);
}
return View(query.ToList());
}
}
更新
现在我看到你需要所有的联盟。在这种情况下,您需要通过以下方式进行分组:
var query= context.Clubs.GroupBy(c=>c.League_Table);
但是您需要将模型的类型更改为IEnumerable
,并在视图中使用两个循环,第一个循环用于每个组的迭代,第二个循环用于每个属于当前组的俱乐部的迭代。但是这个解决方案有一个问题,这个查询没有联盟的名称。我猜League_Table
是您的俱乐部
实体中的FK财产。如果是这种情况,您应该有一个League
导航属性,这样您就可以按联盟名称分组,而不是按Id分组:
var query= context.Clubs.GroupBy(c=>c.League.Name);
因此,在本例中,您的模型类型为IEnumerable
,您可以在手风琴中执行类似操作:
@foreach (var group in Model)
{
<div>
<h2>group.Key</h2>
<table class="contactTable">
<tr>
<th>Club Name</th>
<th>Manager Name</th>
<th>Contact Details</th>
</tr>
@foreach (var item in group)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.Club_Name)</td>
<td>@Html.DisplayFor(modelItem => item.Manager)</td>
<td>@Html.DisplayFor(modelItem => item.Contact_Number)</td>
</tr>
}
</table>
</div>
}
@foreach(模型中的变量组)
{
组键
俱乐部名称
经理姓名
联系方式
@foreach(组中的var项目)
{
@DisplayFor(modelItem=>item.Club_Name)
@DisplayFor(modelItem=>item.Manager)
@Html.DisplayFor(modelItem=>item.Contact\u编号)
}
}
非常感谢@octavioccl这似乎能更好地解释问题。我知道控制器可以改进,但不知道如何最好地解释这个问题。League_表仅用作此r的联赛指标