C# razor视图中的条件逻辑

C# razor视图中的条件逻辑,c#,asp.net-mvc,razor-2,C#,Asp.net Mvc,Razor 2,我有一个表,有两列,我想在表上显示一个学生列表,根据性别分为两列。模型中的所有这些数据都表示为一个数据集,但在视图中,我希望将其拆分,如下所示 Males Females =========== ============== John Jane James

我有一个表,有两列,我想在表上显示一个学生列表,根据性别分为两列。模型中的所有这些数据都表示为一个数据集,但在视图中,我希望将其拆分,如下所示

Males                                          Females
===========                                    ==============
John                                            Jane
James                                           Mary
如何在cshtml视图中实现此逻辑。请注意,这是一个两列表,其中一列将枚举数据

请在下面找到我使用的razor代码

<table width="100%" border="1" class="anothertable">
    <tr>
        <td align="left" width="50%">MALES</td>
        <td align="left" width="50%">FEMALES</td>
    </tr>
    @foreach (var rep in Model.Students) {
        <tr>
            <td align="left" border="0">@if (@rep.IsMale)){ 
                <br />
                <ol type="a">
                    <li><span>@rep.Name</span> </li>
                </ol>
                }
            </td>
        else
        {
            <td align="left" border="0">
                <br />
                <ol type="a">
                    <li>@rep.Name</li>
                </ol>
            </td>
        }
        </tr>
    }
</table>

男性
女性
@foreach(Model.Students中的var rep){
@如果(@rep.IsMale)){

  • @代表姓名
  • } 其他的 {
  • @代表姓名
  • } }
    只是给你一个大概的想法

    您必须将学生列表传递到视图/cshtml中

    这是一个伪代码

    @model List<Student>
    
    <div>
    <h2>Male</h2>
    <ul>
    @foreach(var maleStudent in Model.Where(g=>g.Gender == "Male"))
    {
    <li>@maleStudent.Name</li>
    }
    </ul>
    </div>
    
    <div>
    <h2>Female</h2>
    <ul>
    @foreach(var femaleStudent in Model.Where(g=>g.Gender == "Female"))
    {
    <li>@femaleStudent .Name</li>
    }
    </ul>
    </div>
    
    @型号列表
    男性
    
      @foreach(模型中的var maleStudent.Where(g=>g.Gender==“Male”)) {
    • @男学生,姓名
    • }
    女性
      @foreach(模型中的var femaleStudent,其中(g=>g.Gender==“Female”)) {
    • @女学生。姓名
    • }

    首先,你应该避免在你的观点中使用任何逻辑;所有逻辑都应该在控制器中

    考虑到这一点,您可以尝试以下方法:

    定义视图模型类以将数据保存在两个单独的集合中:

    public class StudentsViewModel
    {
        public IEnumerable<Student> Males { get; set; }
        public IEnumerable<Student> Females { get; set; }
    }
    
    在“视图”文件夹中创建两个视图: -一个用于显示
    SomeAction
    方法的结果(特别是
    SomeAction.cshtml
    ) -一个局部视图,用于显示按性别分隔的学生列表,以便重用标记

    SomeAction
    查看

    @model StudentsViewModel
    
    <div class="left-column">
        <span class="title">Males</span>
        @Html.Partial("name-of-the-partial-view", @Model.Males)
    </div>
    <div class="right-column">
        <span class="title">Females</span>
        @Html.Partial("name-of-the-partial-view", @Model.Females)
    </div>
    
    @model StudentsViewModel
    男性
    @Html.Partial(“部分视图的名称”,@Model.Males)
    女性
    @Html.Partial(“部分视图的名称”,@Model.Females)
    
    局部视图将呈现学生列表:

    @model IEnumerable<Student>
    
    <ul>
    @foreach(var student in Model)
    {
        <li>@student.Name</li>
    }
    </ul>
    
    @model IEnumerable
    
      @foreach(模型中的var学生) {
    • @学生姓名
    • }
    希望这有帮助

    编辑

    现在,在发布代码后,更容易发现问题:不是每行发送两个表格单元格,而是只发送一个。迭代学生集合时,必须为每个学生创建一行,其中包含两个单元格。要做到这一点,只需在一名男生的名字后面和一名女生的名字前面放一个空单元格,如下所示:

    <table width="100%" border="1" class="anothertable">
        <tr>
            <td align="left" width="50%">MALES</td>
            <td align="left" width="50%">FEMALES</td>
        </tr>
        @foreach (var rep in Model.Students) 
        {
            <tr>
                @if (@rep.IsMale))
                { 
                    <td align="left" border="0">
                        <br />
                        <ol type="a">
                            <li><span>@rep.Name</span> </li>
                        </ol>
                    </td>
                    <!-- emit an empty cell here -->
                    <td>&nbsp;</td>
                }
                else
                {
                     <!-- emit an empty cell here -->
                    <td>&nbsp;</td>
                   <td align="left" border="0">
                        <br />
                        <ol type="a">
                            <li>@rep.Name</li>
                        </ol>
                    </td>
                }
            </tr>
        }
    </table>
    
    
    男性
    女性
    @foreach(Model.Students中的var rep)
    {
    @如果(@rep.IsMale))
    { 
    
  • @代表姓名
  • } 其他的 {
  • @代表姓名
  • } }
    你能显示你的代码吗?这只是一个循环过滤数据的问题。我看不出这与显示任何类型的数据有什么不同。你被困在哪里了?你试过但不起作用的代码在哪里??首先,从td标签中取出isMale控件<代码>@if(@rep.IsMale)){…感谢您的支持comments@imdondo,请查看编辑-它应该可以解决您的问题。谢谢@RePierre,但这仍然让我感到空虚rows@imdondo,您能检查一下是否有学生的
    名称
    属性为空吗?
    
    <table width="100%" border="1" class="anothertable">
        <tr>
            <td align="left" width="50%">MALES</td>
            <td align="left" width="50%">FEMALES</td>
        </tr>
        @foreach (var rep in Model.Students) 
        {
            <tr>
                @if (@rep.IsMale))
                { 
                    <td align="left" border="0">
                        <br />
                        <ol type="a">
                            <li><span>@rep.Name</span> </li>
                        </ol>
                    </td>
                    <!-- emit an empty cell here -->
                    <td>&nbsp;</td>
                }
                else
                {
                     <!-- emit an empty cell here -->
                    <td>&nbsp;</td>
                   <td align="left" border="0">
                        <br />
                        <ol type="a">
                            <li>@rep.Name</li>
                        </ol>
                    </td>
                }
            </tr>
        }
    </table>