【发布时间】:2013-07-02 04:47:17
【问题描述】:
我正在使用 Microsoft ASP.NET MVC 4 版本 4.0.30.506.0 编写 MVC4,并且我在 razor 页面中有一个 for 循环,它会生成一个愚蠢的运行时错误!
这是我写的代码:
@{
if (Model.IsAuction)
{
<li class="bc49">@Html.ActionLink("ABCD", "Search", "Home", new {city = "all", type = "auction", category = "all", keyword = "all", condition = "all", sort = "asc"})</li>
}
else
{
<li class="bc49">@Html.ActionLink("EFGH", "Search", "Home", new {city = "all", type = "product", category = "all", keyword = "all", condition = "all", sort = "asc"})</li>
}
int crumpsCount = 48;
for (int i = 0; i < Model.Categories.Count; i++)
{
className = "bc" + crumpsCount;
if (Model.IsAuction)
{
<li class="@className">@Html.ActionLink(Model.Categories[i].Title, "Search", "Home", new {city = "all", type = "auction", category = Model.Categories[i].Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
else
{
<li class="@className">@Html.ActionLink(Model.Categories[i].Title, "Search", "Home", new {city = "all", type = "product", category = Model.Categories[i].Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
crumpsCount--;
}
}
这是由 Visual Studio 2012 生成的错误:
错误发生在循环结束并且 i 的值等于 Model.Categories.Count 之后。似乎编译器试图访问 Model.Categories[Model.Categories.Count] 值!
有趣的事实是,当我用 foreach 循环替换这段代码时,或者即使我在 for 循环之后添加一个 foreach 循环,代码也会正确执行并通过 for 循环!
这是有效的代码:
@{
if (Model.IsAuction)
{
<li class="bc49">@Html.ActionLink("ABCD", "Search", "Home", new {city = "all", type = "auction", category = "all", keyword = "all", condition = "all", sort = "asc"})</li>
}
else
{
<li class="bc49">@Html.ActionLink("EFGH", "Search", "Home", new {city = "all", type = "product", category = "all", keyword = "all", condition = "all", sort = "asc"})</li>
}
int crumpsCount = 48;
for (int i = 0; i < Model.Categories.Count; i++)
{
className = "bc" + crumpsCount;
if (Model.IsAuction)
{
<li class="@className">@Html.ActionLink(Model.Categories[i].Title, "Search", "Home", new {city = "all", type = "auction", category = Model.Categories[i].Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
else
{
<li class="@className">@Html.ActionLink(Model.Categories[i].Title, "Search", "Home", new {city = "all", type = "product", category = Model.Categories[i].Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
crumpsCount--;
}
foreach (CategoryInfo categoryInfo in Model.Categories)
{
className = "bc" + crumpsCount;
if (Model.IsAuction)
{
<li class="@className">@Html.ActionLink(categoryInfo.Title, "Search", "Home", new {city = "all", type = "auction", category = categoryInfo.Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
else
{
<li class="@className">@Html.ActionLink(categoryInfo.Title, "Search", "Home", new {city = "all", type = "product", category = categoryInfo.Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
crumpsCount--;
}
}
我刚刚分享了这段代码,看看这是否是一个错误,如果它是一个错误,它是否是已知的。
感谢大家。 :)
更新: 太傻了,现在代码也不能用foreach循环了!
foreach 循环内没有索引,但异常提到索引超出范围!
代码如下:
foreach (CategoryInfo categoryInfo in Model.Categories)
{
className = "bc" + crumpsCount;
if (Model.IsAuction)
{
<li class="@className">@Html.ActionLink(categoryInfo.Title, "Search", "Home", new {city = "all", type = "auction", category = categoryInfo.Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
else
{
<li class="@className">@Html.ActionLink(categoryInfo.Title, "Search", "Home", new {city = "all", type = "product", category = categoryInfo.Name, keyword = "all", condition = "all", sort = "asc"})</li>
}
crumpsCount--;
}
我还应该提到 Model.Categories 是一个 IList 对象。
【问题讨论】:
-
堆栈跟踪是什么?
-
我认为您的签名方式错误 int i = 0;我 模型.类别.计数;我++
-
抱歉忽略我的评论我有代码失明:-)
-
您是否考虑过使用模板而不是使用这些循环来表达您的观点?
-
该错误几乎肯定实际上来自不同的行。 (可能是涉及数组的一行)
标签: asp.net-mvc asp.net-mvc-4 razor for-loop