Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 部分视图ASP MVC 5 C:如何使用部分视图获取部分表?_C#_Html_Asp.net Mvc 5 - Fatal编程技术网

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>
    }