Имеет ли ASP.NET MVC что-нибудь эквивалентное функции DataTemplate WPF? - PullRequest
2 голосов
/ 24 июня 2009

В моем проекте ASP.NET MVC у меня есть полиморфная коллекция, которую я хочу визуализировать - скажем, IEnumerable<ISomething>, где отдельные элементы могут быть смесью различных реализаций ISomething.

Я бы хотел, чтобы отображался этот список, где каждый конкретный тип отображается в соответствии со своим собственным шаблоном (возможно, строго типизированным ViewUserControl).

В WPF я мог бы указывать шаблоны данных, которые будут автоматически связывать конкретные типы с конкретными шаблонами. Можно ли сделать что-то подобное в ASP.NET MVC?

Очевидно, что я могу перебрать список и попробовать выполнить приведение с использованием ключевого слова is, а затем использовать множество операторов if для визуализации желаемого элемента управления, но я надеялся на что-то более элегантное (например, WPF).

Ответы [ 3 ]

1 голос
/ 16 июля 2009

Я закончил разработку решения самостоятельно - я описал его в DataTemplating В ASP.NET MVC .

0 голосов
/ 15 июля 2009

У меня была похожая проблема, и я так и не нашел "простого" ответа. Мне было полезно знать, что все элементы в списке будут отображаться одинаково, поэтому я создал декоратор для ISomething, преобразовал список в IEnumerable, используя некоторый код из проекта Umbrella (http://umbrella.codeplex.com),, а затем извлек соответствующие шт. вроде как следующее:

public interface ISomethingDecorator
{
  string Description { get; }
  string[] Actions { get; } 
}

public class BigSomethingDecorator : ISomethingDecorator { /* ... */ }
public class SmallSomethingDecorator : ISomethingDecorator { /* ... */ }

Затем, как я уже сказал, я использую проект Umbrella для преобразования из ISomething в ISomethingDecorator и возвращаю IEnumerable в View.

Не знаю, поможет ли это вам в том, что вы пытаетесь сделать - особенно опозданием на месяц - но я подумал, что дам вам знать, как я справился с этим. Если вы отображаете совершенно разные форматы, это, вероятно, не сработает, но, возможно, поможет вам начать с этого.

0 голосов
/ 24 июня 2009

Я не уверен, что получу вас полностью, но почему бы вам не внедрить метод для вашего интерфейса ISomething, например, рендер, который по контракту будет реализован для всех ваших других конкретных сущностей, а затем выполнить итерацию через каждый предмет в полиморфной коллекции и назовите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...