Как я могу изменить представление страницы без растянутого чудовища при просмотре имени пользователя в веб-формах? - PullRequest
0 голосов
/ 17 декабря 2011

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

Некоторые примеры вещей, которые отличаются:

  • В столбце «Дата рождения» указаны точные значения DOB для лиц с определенной ролью и месяц их рождения для других пользователей.
  • Фамилии являются гиперссылкой для тех, кто выполняет определенную роль, и просто обычным литералом для всех остальных.
  • В таблице также есть дополнительный столбец для людей с определенной ролью.

В настоящее время, по сути, у меня вся страница продублирована с небольшими изменениями внутри элемента управления loginview. Это кажется плохим способом ведения бизнеса, но я не совсем уверен в более чистом способе сделать это с помощью веб-форм. С MVC и Razor (с которыми у меня меньше опыта) кажется, что было бы довольно тривиально настроить вывод с некоторыми условными представлениями, но в веб-формах это кажется менее интуитивным.

Есть ли лучший способ сделать это в веб-формах?

1 Ответ

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

Я сделал аналогичные реализации с использованием повторителя и добился успеха при следующем подходе:

Используйте шаблон декоратора, чтобы добавить «директивы отображения» к объекту, который вы привязываете к повторителю.В вашем примере я мог бы добавить флаги bool для ShowFullDob, ShowLastNameAsLink и ShowColumnX (для вашего необязательного столбца).

Когда вы извлекаете данные для отображения, преобразуйте объекты модели в новые декорированные объекты модели иустановите флаги bool в соответствии с текущим запросом.

Эта часть немного нелогична: в ItemTemplate вашего ретранслятора визуализируйте ALL данные, но используйте свои флаги bool дляустановите атрибут Visible (см. пример кода ниже).

<ItemTemplate>
    <td runat="server" Visible='<%# (bool)DataBinder.Eval(Container.DataItem, "ShowFullDob") %>'>construct full DOB here</td>
    <td runat="server" Visible='<%# !((bool)DataBinder.Eval(Container.DataItem, "ShowFullDob")) %>'>construct just the birth month/year here</td>
</ItemTemplate>

Возможно, другие SO могут предложить более элегантные способы реализации условных элементов в повторителе - если это так, я бы хотел их услышать!Однако, несмотря на то, что это немного некрасиво и жестко, оно выполняет свою работу.

...