ASP.NET MVC2 - определить, какой тип шаблона отображается - PullRequest
0 голосов
/ 29 июля 2010

Вместо использования DisplayFor и EditorFor я хотел бы создать более общий ContentFor. В этом расширении Html он будет учитывать значения метаданных, чтобы определить, как отобразить результирующий элемент управления. Единственная часть головоломки, которую я не могу определить, это: Есть ли способ определить, отображаю ли я в настоящее время DisplayTemplate или EditorTemplate. В качестве реального примера этого при рендеринге строки для экранной версии я хотел бы отобразить ее как a, но при рендеринге версии редактора я хотел бы отобразить ее как текстовое поле.

Чтобы лучше объяснить, скажем, у меня есть два шаблона с именем Address.ascx, один в каталоге DisplayTemplates и один в каталоге EditorTemplates. Я хотел бы, чтобы они оба использовали ContentFor для рендеринга, но в отображаемой версии он отображается как метка, а в версии редактора - как текстовое поле.

1 Ответ

0 голосов
/ 30 июля 2010

Использование двух файлов ASCX для вызова одного файлового элемента управления (что выполнимо, просто сделайте другой RenderPartial или DisplayFor / LabelFor) не имеет смысла для меня. Это нарушает «разделение проблем». Метка отображает метки, а Дисплей отображает значения, поэтому элементу управления не имеет смысла пытаться определить, каким образом вы хотите, чтобы он отображался.

Если вы хотите использовать пользовательское отображение или метку для свойства, используйте аннотацию данных UIHint.

[UIHint("MyCustomControlName")]

Затем в DisplayTemplates и EditorTempaltes создайте файл "MyCustomControlName.ascx", чтобы отобразить это свойство по своему усмотрению. Кроме того, элементы управления ascx могут читать пользовательские метаданные модели и делать все, что вам нужно. Пример на http://weblogs.asp.net/seanmcalinden/archive/2010/06/11/custom-asp-net-mvc-2-modelmetadataprovider-for-using-custom-view-model-attributes.aspx.

...