这是我的观看代码:
@model IEnumerable<StudentRegistrationPortal.Models.CourseRegisterModel>
@{
ViewBag.Title = "Welcome Student";
}
<h2>Welcome
@Context.User.Identity.Name
</h2>
@Html.ActionLink("[Sign Out]", "SignOut", "Student")
<ul>
<li>@Html.ActionLink("Register Courses", "registerCourses", "Course")</li>
</ul>
<%if (Model.Count == 5) { %>
<table border="1">
<tr>
<th>
RollNumber
</th>
<th>
Course Code
</th>
<th>
Course Name
</th>
<th>Add/Drop</th>
</tr>
<tr>
<td>
@Context.User.Identity.Name
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(0).Course.Code)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(0).Course.Name)
</td>
<td>
@Html.ActionLink("Drop", "Drop", new { id=-1 })
</td>
</tr>
<tr>
<td>
@Context.User.Identity.Name
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(1).Course.Code)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(1).Course.Name)
</td>
<td>
@Html.ActionLink("Drop", "Drop", new { id=-1 })
</td>
</tr>
<tr>
<td>
@Context.User.Identity.Name
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(2).Course.Code)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(2).Course.Name)
</td>
<td>
@Html.ActionLink("Drop", "Drop", new { id=-1 })
</td>
</tr>
<tr>
<td>
@Context.User.Identity.Name
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(3).Course.Code)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(3).Course.Name)
</td>
<td>
@Html.ActionLink("Drop", "Drop", new { id=-1 })
</td>
</tr>
<tr>
<td>
@Context.User.Identity.Name
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(4).Course.Code)
</td>
<td>
@Html.DisplayFor(modelItem => Model.ElementAt(4).Course.Name)
</td>
<td>
@Html.ActionLink("Drop", "Drop", new { id=-1 })
</td>
</tr>
</table>
<% } %>
如果模型计数等于5,我已经将IF条件添加到只绘制表但是如果模型不包含数据,那么它会给出错误:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
IF条件有什么问题?
感谢。
答案 0 :(得分:3)
只有正好5 CourseRegisterModel
时,您的代码才有效。这是你的问题。
为什么不直接迭代模型
@foreach(StudentRegistrationPortal.Models.CourseRegisterModel modelValue in Model)
{
<tr>
<td>
@Context.User.Identity.Name
</td>
<td>
@Html.DisplayFor(modelItem => modelValue.Course.Code)
</td>
<td>
@Html.DisplayFor(modelItem => modelValue.Course.Name)
</td>
<td>
@Html.ActionLink("Drop", "Drop", new { id=-1 })
</td>
</tr>
}
答案 1 :(得分:2)
如果您真的坚持在视图中执行此逻辑,那么您可以使用运算符优先级并检查包含项的模型。如果没有进一步的addo,请编辑你的行:
<%if (Model.Count == 5) { %>
为:
// check will only continue if Model.Any() evaluates to true
@if (Model.Any() && Model.Count == 5) { ... }
我个人会在我的服务或控制器类中的viewModel中执行此操作,并且真正充实了这个硬编码Count == 5现有所需的逻辑。你似乎在混合razon和webforms语法。
答案 2 :(得分:1)
为什么在if子句中使用&lt;%语法,将其更改为使用@
@if (Model.Count == 5)
{
也在最后更改&lt;%}%&gt;以下
}
答案 3 :(得分:1)
如果Model为Null,则访问计数将抛出异常。所以在此之前你必须检查模型是否为null。
@if(Mode != null && Mode.Count == 5)
{
//....