模型计数检查MVC3视图

时间:2013-07-29 16:25:31

标签: c# asp.net-mvc-3

这是我的观看代码:

@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条件有什么问题?

感谢。

4 个答案:

答案 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)
{
//....