C# 部分视图ASP MVC 5 C:如何使用部分视图获取部分表?
我正在尝试从另一个视图使用部分视图创建一个表 我要显示的视图的内容:C# 部分视图ASP MVC 5 C:如何使用部分视图获取部分表?,c#,html,asp.net-mvc-5,C#,Html,Asp.net Mvc 5,我正在尝试从另一个视图使用部分视图创建一个表 我要显示的视图的内容: @model Agro1.ModelView.MessageViewModel @using Agro1.Models <span style="color:darkgreen">Messages</span> <br /> <table> <tr> <td>Subject</td> <td&
@model Agro1.ModelView.MessageViewModel
@using Agro1.Models
<span style="color:darkgreen">Messages</span>
<br />
<table>
<tr>
<td>Subject</td>
<td>Content</td>
<td>Farmer Email</td>
</tr>
@{
foreach (Message obj in Model.messages)
{
<tr>
<td>@obj.Subject</td>
<td>@obj.Content</td>
<td>@obj.FarmerEmail</td>
</tr>
}
}
</table>
它显示了整个表格。
我怎样才能只显示前5行
t您应该向模型中添加一个新特性,其中包含要显示的最大行数。 之后,您可以在foreach期间检查此属性
@model Agro1.ModelView.MessageViewModel
@using Agro1.Models
<span style="color:darkgreen">Messages</span>
<br />
<table>
<tr>
<td>Subject</td>
<td>Content</td>
<td>Farmer Email</td>
</tr>
@{
var x = 0;
foreach (Message obj in Model.messages)
{
if (Model.MaxRows > 0 && x > Model.MaxRows) break;
<tr>
<td>@obj.Subject</td>
<td>@obj.Content</td>
<td>@obj.FarmerEmail</td>
</tr>
x++;
}
}
</table>
您可以在控制器操作或razor中使用linq语法.take5 您的razor代码如下所示:
@Html.Partial("DisplyaMessages", new MessageViewModel { MaxRows = 5, messages = Model.messages})
@{
foreach (Message obj in Model.messages.take(5))
{
<tr>
<td>@obj.Subject</td>
<td>@obj.Content</td>
<td>@obj.FarmerEmail</td>
</tr>
}
take方法在foreach的每次迭代中执行。如果您首先获取五条记录并将结果存储在某个地方,然后遍历结果,不是更好吗?谢谢您的回答。如何使用linq语法?当我添加.take5时,它被标记为错误。您的意思是我应该创建一个只包含前五行的表的新视图吗?很抱歉听到您在编写代码时出错。take5这里有一个指向相关Microsoft文档的链接,以回答您的第二个问题,不,您不需要创建一个只有5行的表。其目的是.take5将从表中选择最多5行,而不管表中包含多少行数据。在控制器上执行代码并使用该代码确保MessageViewModel限制为5行可能会更成功。嗨,Jason。谢谢你的评论。我不同意使用foreach会导致.take5执行每个迭代。我的理解是.take的操作类似于where子句,并且肯定不会在每次迭代中执行。我想知道为什么您认为它会执行每个迭代Hi,谢谢您的回答。无法识别MaxRows表达式您是否将属性MaxRows添加到MessageViewModel模型中?这样,您可以在所有视图中使用相同的部分,只需设置最大行数
@{
foreach (Message obj in Model.messages.take(5))
{
<tr>
<td>@obj.Subject</td>
<td>@obj.Content</td>
<td>@obj.FarmerEmail</td>
</tr>
}