MVC4 Razor视图智能感知问题

3

解释:

这些 Views 是使用默认的脚手架类型生成的: "使用 Entity Framework 的 MVC 控制器,具有读/写操作和视图"

我想知道为什么在更改强类型 Model 并将其更改回来后,“不显示智能感知”不会显示智能感知。

<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个回答

2

这种情况有点奇怪,但由于它是一个 IEnumerable,您只能在此时使用一些像 Count() 这样的东西。

然而,您可以使用 @Html.LabelFor(m => m.FirstOrDefault().UserName) 来获得一个具有智能提示的实例。

顺便说一下:我曾经看到过默认的 MVC 脚手架使用实例属性(尽管它是一个 IEnumerable),我的猜测是有一种重载方式可以运行,或者是 MVC 小精灵正在连接它。无论哪种方式,最好使用 FirstOrDefault()。作为一种快捷方式,我倾向于在页面顶部声明一个单独的元素,并将其用于标题的目的。例如:

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

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

为什么要使用默认值?当返回 null 时,header.FirstName 将抛出异常! - Elisabeth

1
由于您的收藏中现在有多个用户配置文件,因此它不会显示。
@foreach (var user in Model)
{
    @Html.DisplayNameFor(model => model.Name)
}

对不起,您能再解释一下吗?我以CopyUserProfiles为例子(在上面的代码示例中)。 - Don Thomas Boyle
@DonThomasBoyle 在你的控制器中展示你传递给视图的内容。你是传递一个用户还是一组用户? - Stan
@Steve,这是你要的,上下文、模型、视图、控制器代码都在,看看能否找出问题所在? - Don Thomas Boyle
@DonThomasBoyle 我是正确的,你返回的是用户列表,而不是一个用户,所以你需要循环遍历它们以显示它们的值。 - Stan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接