好像是MVC 4 Razor“for”循环中的一个错误?

时间:2013-06-17 14:12:56

标签: asp.net-mvc asp.net-mvc-4 razor for-loop

我正在使用Microsoft ASP.NET MVC 4版本4.0.30.506.0编写MVC4并且我在剃刀页面中有一个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生成的错误:

Error generated!

错误发生在循环结束后,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--;
                    }
                }

我刚刚分享了这段代码,看看这是不是一个bug,如果它是一个bug,那么它是否已知。

感谢大家。 :)

更新 这太愚蠢了,现在代码也不适用于foreach循环!

enter image description here

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&lt;&gt;对象

1 个答案:

答案 0 :(得分:1)

问题解决了。我看到MVC中没有错误,但在MVC / Razor运行时引用的错误异常引用了确切错误位置上方的一行,并让我认为框架的运行时存在错误。 真正的例外是关于一个从数据库返回空的数组,我写的代码试图访问该数组的索引0,因此我的代码中有一个超出范围的异常,但异常引用了10行高于我写的确切的访问代码,所以我认为这将是一个错误。 感谢您的回复评论,并希望这将有助于未来的人。