ASP .NET: управление динамической загрузкой vs Visible = true - PullRequest
5 голосов
/ 20 августа 2009

Какой из них рекомендуется? Позвольте мне объяснить, чего я хочу достичь!
У меня есть одна страница, используемая многими пользователями, у каждого пользователя есть разные роли, такие как администратор, оператор, обычный пользователь.
Когда клиент открывает эту страницу, я хочу отобразить набор элементов управления (кнопок), который зависит от их роли.
Администратору разрешено выполнять x и y, но обычному пользователю запрещено выполнять эти действия.

Для достижения того, что я хочу сделать, какой подход является лучшим?
Должен ли я определить все элементы управления в HTML, а затем переключить свойство Visible или динамически загрузить необходимые элементы управления?

<Ч />

Для Visible = false Я беспокоюсь о времени обработки сервера. Даже если разметка HTML не отправляется клиенту для элемента управления Visible = false, я знаю, что элемент управления все еще загружается ASP .NET и, возможно, даже обрабатывается, но его результат HTML не записывается в поток вывода.

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

Ответы [ 4 ]

3 голосов
/ 20 августа 2009

Я бы не стал делать это динамически, поскольку выигрыш не стоит сложности или предполагаемой экономии. Также, если вы установите visible = false, имейте в виду, что состояние просмотра все еще включено для ваших элементов управления. Если вы беспокоитесь о возврате и передаче данных и работе с большим состоянием представления, убедитесь, что вы отключили состояние представления для всех элементов управления или для родительской панели, которая их содержит. У вас будет то же неудобство для поддержания их состояния при обратной передаче, что и при динамическом выполнении.

Кроме того, делать это не динамически намного проще для следующего парня, работающего с кодом. Макет очевиден и его легче визуализировать, чем пытаться выяснить, какой код, когда что помещает, куда.

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

Наконец, проще не делать это динамически, так почему бы сначала не взять самый простой маршрут и посмотреть, если это проблема. Если это становится проблемой, уточните ее, если необходимо.

1 голос
/ 20 августа 2009

Что если вы поместите элементы управления разных ролей в разные панели и просто в видимую / невидимую целую панель

1 голос
/ 20 августа 2009

Еще одним неудобством с динамическими элементами управления является большой объем хрупкого кода, который вы должны написать, чтобы справиться с ними, и проблемы с их отладкой. Если у вас нет чрезвычайно сложных элементов управления, которые занимают много времени, или вы действительно определили проблему с производительностью, я бы настоятельно рекомендовал невидимый метод (и регулярно делаю). Это принцип KISS в действии (не говоря уже о принципе «не предварительно оптимизировать»).

1 голос
/ 20 августа 2009

.Visible = false вполне разумный подход для этого. Не беспокойтесь о скорости этого метода, пока через профилирование не докажете, что он необходим.

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