Редактор шаблонов для списка <ComplexType>не работает - PullRequest
1 голос
/ 25 декабря 2011

Я пытаюсь создать шаблон редактора для List<Package>. Я полностью определяю тип в моем представлении Editortemplate следующим образом:

@model List<JYP.Business.ViewModels.Package>

Когда я пытаюсь ссылаться на Model в моем представлении Editortemplate, я получаю нулевую ссылку, которая заставляет меня поверить, что модель не ассоциируется должным образом. Мне пришлось использовать UIHint в моей ViewModel, чтобы он вообще использовал шаблон Editor. Моя ViewModel содержит List<Package> Packages, это то, что я пытаюсь сделать так, чтобы мой пользовательский шаблон Editor забрал. Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Вы можете полагаться на условные обозначения:

public class MyViewModel
{
    public List<Package> Packages { get; set; }
}

, а затем на главном экране:

@model MyViewModel
@Html.EditorFor(x => x.Packages)

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

@model JYP.Business.ViewModels.Package
...

По договоренности этот шаблон редактора должен быть помещен в ~/Views/SomeController/EditorTemplates/Package.cshtml или ~/Views/Shared/EditorTemplates/Package.cshtml.Это две локации, которые ASP.NET MVC будет искать в указанном порядке.

0 голосов
/ 25 декабря 2011

По вашему требованию я понимаю, что вы не хотите использовать UIHint или любой другой способ, который говорит, какой шаблон использовать.

Это может работать для вас.

public class PackageCollection : List<JYP.Business.ViewModels.Package>
    {
    }

Теперь в основной модели используйте

public class ModelTest{
public PackageCollection Items { get; set;}
public ModelTest(){
    Items = new PackageCollection();
}
}

Теперь создайте шаблон EditorTemplate с именем PackageCollection.cshtml или PackageCollection.ascx в соответствии с вашим ViewEngine.

Другое решение

Теперь, если вы не хотите использовать UIHint и выше решение, вы должны указать TemplateName в Editor For

Html.EditorFor(model=>model.Items , "yourtemplatename")

Это работает без создания класса packagecollection.

Спасибо.

...