Возможно, вы можете сохранить состояние администратора в переменной сеанса или что-то в этом роде, но, похоже, более целесообразно создать частичный вид с помощью меню (если вы еще этого не сделали) и просто проверить там. У вас по-прежнему будет вызов базы данных для каждого запроса на страницу, но нет дублирования кода. И если у вас нет проблем с производительностью прямо сейчас, один дополнительный вызов действительно не такой большой сделки.
Если у вас есть проблемы с производительностью, убедитесь, что вы оптимизировали свой собственный код, имеете все правильные индексы на db и т. Д. Многое увеличение производительности (особенно в проблемах, связанных с db) обычно можно сделать путем реструктуризации как все сделано, вместо какой сделан.
UPDATE:
В ASP.NET MVC 2 есть на самом деле даже лучше, как вы могли бы сделать это, объединяющие Html.RenderAction()
и AuthorizeAttribute
(или, возможно, написать свой собственный унаследованный атрибут, который устанавливает флаг вместо того, чтобы возвратить ошибку, когда пользователь не авторизовался). Таким образом, вы должны минимизировать логику представления и лучше соответствовать принципам MVC.
Может быть связано - http://stackoverflow.com/questions/1968772/asp-net-mvc-database-driven-menu-with-caching, http://stackoverflow.com/questions/723994/best-way -в-проводной вверх на основе баз данных меню-в-Asp-нетто-MVC, – Ahmad