MVC4 Razor查看IntelliSense问题

时间:2013-07-26 18:01:49

标签: asp.net-mvc razor

说明:

视图是使用默认的脚手架类型生成的:“具有读/写操作和视图的MVC控制器,使用实体框架”

我想知道为什么“不显示INTELLISENSE” chaning强类型模型后不会显示智能感知,即使你把它改回来。

<table>
<tr>
    <th>
        @Html.DisplayNameFor(model => model.UserName) <- DOES NOT SHOW UP (INTELLISENSE)unless strongly typed against a NON-Collection must remove lambda expression
    </th>
    <th>
        @Html.DisplayNameFor(model => model.)<- DOES NOT SHOW UP (INTELLISENSE) unless strongly typed against a NON-Collection must remove lambda expression
    </th>
    <th>
        @Html.DisplayNameFor(model => model.)<- DOES NOT SHOW UP (INTELLISENSE)unless strongly typed against a NON-Collection must remove lambda expression
    </th>
    <th>

    </th>
</tr>


@foreach (var item in Model) {
<tr>
    <td>
       @Html.DisplayFor(modelItem => item.UserName)<- SHOWS INTELLISENSE
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)<- SHOWS INTELLISENSE
    </td>
    <td>

2 个答案:

答案 0 :(得分:2)

有点怪我,但因为它是IEnumerable,你当时只有Count()这样的东西。

但是,您可以使用@Html.LabelFor(m => m.FirstOrDefault().UserName),所以现在您有一个智能感知实例。

旁注:我已经看到开箱即用的MVC脚手架使用了一个实例属性(尽管它是IEnumerable)并且我唯一的猜测就是有一个以这种方式工作的重载,或者有MVC侏儒接线。不管怎样,你使用FirstOrDefault()可能更好。作为一种捷径,我倾向于在页面顶部声明一个元素,并将其用于标题。 e.g。

@model IEnumerable<Foo>
@{
 @header = Model.FirstOrDefault();
}

@* ... *@
  <th>@Html.LabelFor(x => header.FirstName)</th>
  <th>@Html.LabelFor(x => header.LastName)</th>
@* ... *@

答案 1 :(得分:1)

它没有显示它,因为现在您的集合中有多个用户配置文件。

@foreach (var user in Model)
{
    @Html.DisplayNameFor(model => model.Name)
}