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> </td>
}
else
{
<!-- emit an empty cell here -->
<td> </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> </td>
}
else
{
<!-- emit an empty cell here -->
<td> </td>
<td align="left" border="0">
<br />
<ol type="a">
<li>@rep.Name</li>
</ol>
</td>
}
</tr>
}
</table>