2013-07-26 2 views
3

Explaination:Razor Посмотреть вопросы MVC4 Intelisense

Взгляды формируются с типом подмостей по умолчанию: «контроллер MVC с операции чтения/записи, а также просматривать, используя Entity Framework»

Я хотел бы знать, почему «НЕ ПОКАЗЫВАЕТСЯ В ИНТЕЛИЗИРОВАНИИ» не показывают intellisense после chaning сильно типизированной модели, даже если вы меняете ее обратно.

<table> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.UserName) <- DOES NOT SHOW UP (INTELISENSE)unless strongly typed against a NON-Collection must remove lambda expression 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.)<- DOES NOT SHOW UP (INTELISENSE) unless strongly typed against a NON-Collection must remove lambda expression 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.)<- DOES NOT SHOW UP (INTELISENSE)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 INTELISENSE 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.FirstName)<- SHOWS INTELISENSE 
    </td> 
    <td> 

ответ

2

Любопытных Диковины меня тоже, но так как это в IEnumerable вы бы только такие вещи, как Count() доступных в то время.

Однако вы можете использовать @Html.LabelFor(m => m.FirstOrDefault().UserName), так что теперь у вас есть экземпляр с intellisense.

Боковое примечание: я видел, что из-под коробки MVC сходят с использованием свойства экземпляра (несмотря на то, что это IEnumerable), и я только предполагаю, что существует перегрузка, которая работает таким образом, или там это гномы MVC, подключающие его. В любом случае, вероятно, вам лучше использовать FirstOrDefault(). В качестве ярлыка я склонен объявлять один элемент в верхней части моей страницы и использовать его для заголовков. например

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

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

Спасибо, что работает :) –

+0

Почему по умолчанию? При возврате null заголовок. FirstName выдаст исключение! – Elisabeth

1

Это не показывает, потому что теперь у вас есть несколько профилей пользователей в вашей коллекции.

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

Да, у меня была эта же проблема, но я понял, в нелегком пути ... – skmasq

+0

Мне жаль могли бы вы объяснить немного больше? В качестве примера я использовал CopyUserProfiles. (в приведенном выше примере кода) –

+0

@DonThomasBoyle Покажите, что вы передадите на просмотр в своем контроллере. Пропускаете ли вы одного пользователя или коллекцию пользователей? – sed

Смежные вопросы