Как мне сделать ASP.NET MVC3 DisplayTemplate, который отображает содержимое коллекции? - PullRequest
0 голосов
/ 14 марта 2011

Я пытаюсь отобразить содержимое коллекции в моем представлении ... но использую DisplayTemplate для обработки определения представления для этого специализированного свойства / объекта.

например.

<div class="display-label">Foos</div>
<div class="display-field">@Html.DisplayTextFor(_ => Model.Foos)</div>

и объект foo это ..

public class Foo
{
    public string Name { get; set; }
    public string Blah { get; set; }
}

и ...

public string MyModel
{
    public ICollection<Foo> Foos { get; set;}
}

Итак, я создал папку с именем DisplayTemplates, в моем представлениипапка для этого контроллера.Затем я добавил в файл с именем Foo.cshtml следующее содержание

@model MyNamespace.....Foo

@Model [@Model.Blah] @Model.Name

и что у меня отображается на моем виде?

System.Collections.Generic.List`1 [MyNamespace ..... Foo]

.Я подтвердил, что в этой коллекции есть хотя бы один предмет.Есть идеи, ребята?

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Нашел мой ответ:)

Я (неправильно)

@Html.DisplayTextFor(_ => Model.Foos)

, но я НЕ должен был использовать DisplayTextFor, но DisplayFor

@Html.DisplayFor(x => x.Model.Foos)

Кроме того, я приобрел копию Стива Сандерсона Pro ASP.NET MVC2 Framework (2-е издание) .pdf, и на странице 423 он говорит (и я искренне надеюсь, что яздесь не ущемляются авторские права).

Например, теперь вы можете визуализировать перечислимую коллекцию экземпляров Person с одной разметкой строки обзора, например:

<%:Html.DisplayFor(x => x.MyPersonCollection) %>
//This would render the Person.ascx partial once 
//for each item in the collection. 

И он был прав, и этот текст высветил мою ошибку.

Win:)

0 голосов
/ 14 марта 2011

Я думаю, что это должно быть:

@model MyNamespace.....Foo

[@:Model.Blah] @:Model.Name

Вы можете даже использовать тег <text>.

Подробности смотрите в сообщении Скотта Гу: ASP.NET MVC 3: Razor's @: и синтаксис

...