错误:无法在此范围内声明名为'Model'的局部变量

问题描述 投票:0回答:1

我正在重现视图的列表。因此,该模型是IEnumerable的。它在foreach循环中可以很好地获取员工。但是当我在循环中使用此Model时,会给我错误。“无法在此范围内声明名为'Model'的局部变量,因为它将赋予'Model'不同的含义,而该'Model'已在'parent'或'parent'中使用。当前的范围以表示其他内容“。在循环中,当我使用Model以外的其他名称时,效果很好。

查看@model IEnumerable

@foreach (tbEmployee emp in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(Model => emp.empID)
            </td>
            <td>
                @Html.DisplayFor(Model  => emp.empName)
            </td>
            <td>
                @Html.DisplayFor(Model  => emp.empAge)
            </td>
            <td>
                @Html.DisplayFor(Model  => emp.empStatus)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", "Employee")
                @Html.ActionLink("Update", "Update", "Employee")
                @Html.ActionLink("Delete", "Delete", "Employee")
            </td>
        </tr>
    }

但是当我这样写时,它可以正常工作

 @foreach (tbEmployee emp in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(x => emp.empID) //where this x get data from
            </td>
            <td>
                @Html.DisplayFor(x => emp.empName)
            </td>
            <td>
                @Html.DisplayFor(x => emp.empAge)
            </td>
            <td>
                @Html.DisplayFor(x => emp.empStatus)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", "Employee")
                @Html.ActionLink("Update", "Update", "Employee")
                @Html.ActionLink("Delete", "Delete", "Employee")
            </td>
        </tr>
    }
c# asp.net-mvc-5.2
1个回答
0
投票

首先,此错误消息已在较新的C#版本中删除;设计团队决定,它造成的混乱比阻止错误要多。

问题在于,名称Model在这里用来表示两件事:将任何属性或变量用作foreach的集合,以及用作lambda的形式参数。此外,这两种用法overlap。也就是说,在Model中使用的foreach是[[直接在外部在Model内部的foreach的用法。基本上,这里的编译器说的是“您正在创建一种可能使用相同名称来表示彼此相邻的两个完全不同的事物的情况”,这是一个非常容易混淆且容易出错的情况。

此错误消息的意图很明确,但遗憾的是,编译器在向用户解释问题方面做得不好。我做了一些工作来改善2011年的错误消息?或附近。但是这些改进充其量是微不足道的。

您已经发现,正确的解决方法是

停止使用相同的名称表示同一范围内的两个完全不同的事物。

© www.soinside.com 2019 - 2024. All rights reserved.