Я не совсем понимаю ваше утверждение, не могли бы вы перефразировать?

м представлении у меня есть некоторые административные ссылки, которые я хотел бы скрыть и показать в зависимости от роли пользователя, как это можно сделать внутри представления, например,

<%= if(CHECK IF USER ROLE ADMIN) { %>
        <div class="tools">
            <ul>
                <li class="edit"><%= Html.ActionLink("Edit", "Edit", new { id = Model.storyId }) %></li>
                <li class="delete"><%= Html.ActionLink("Delete", "Delete", new { id = Model.storyId }) %></li>
            </ul>
        </div>
<%= } %>
 Cameron06 янв. 2011 г., 01:47
Я бы предпочел просто проверить внутри представления, используя простое выражение if. Я делал это раньше, но просто не могу вспомнить код.
 R0MANARMY06 янв. 2011 г., 01:44
Возможно, вы захотите просто выполнить эту проверку в своем действии и поместить значение в хеш ViewData или в качестве свойства вашей модели представления, чтобы сохранить ваши представления тупыми.
 R0MANARMY06 янв. 2011 г., 01:54
Кроме того, что означает «пользовательская роль - администратор». Мы говорим о полномочиях Windows или определении вашего приложенияадминистратор?
 Cameron06 янв. 2011 г., 02:00
Я не вижу причин, чтобы не отображать его в представлении, если это просто проверка роли для отображения ссылок. У меня также есть проверки в Контроллере против методов Edit и Delete, поэтому пользователям все еще нужно иметь доступ, но я также хотел показать ссылки на правильных пользователей, чтобы сделать это проще. Я не вижу проблемы.
 R0MANARMY06 янв. 2011 г., 01:52
То, что вы сделали это раньше, не делает это отличной идеей. Помните, что любой код (хотя и тривиальный), который вы помещаете в свое представление, - это код, который вы (по крайней мере, легко) не можете написать для тестирования или рефакторинга. Роб Коннери также написал отличный пост некоторое время назад наИзбегайте супа тегов.

Ответы на вопрос(3)

@if (this.User.IsInRole("Administrator"))
{

}
 Ege Ersoz15 мая 2016 г., 03:18
Это должен быть принятый ответ.
 PAVITRA29 апр. 2017 г., 08:53
используя это. решил проблему

что эти данные должны предоставляться «заранее определенными», если хотите, контроллером или другими бизнес-службами, тогда как представление просто использует, насколько это возможно, HTML-разметку и структуры управления языком, чтобы «конкретизировать page "с использованием других типичных полезностей создания веб-страниц, таких как jquery, css и т. д. и т. д.

 Shawn Mclean22 сент. 2011 г., 22:03
Я не совсем понимаю ваше утверждение, не могли бы вы перефразировать?
<% if (Page.User.IsInRole("Admin")){ %>

<%}%>

на мой взгляд, это ужасная идея. Лучше позволить ViewData или Model представлять то, что должно отображать представление, и представление может просто проверить данные представления. Базовый класс контроллера или фильтр действий могут использовать это очень просто и позволяют коду существовать в одном месте.

 Sinjai17 авг. 2017 г., 22:52
Я в той же лодке, что и @Methodician, но я не могу найти подходящих альтернатив.
 Methodician23 янв. 2016 г., 03:19
Я обычно использую ViewModel для отправки такого рода информации с контроллера. Тем не менее, я пытаюсь отобразить некоторые вещи в моем основном _Layout.cshtml на основе ролей. Насколько «ужасна» идея и почему? Стоит ли создавать строго типизированные частичные представления только для того, чтобы добавить класс, показывающий и скрывающий содержимое, или это выборочное использование вспомогательного метода в моем _Layout? Я просто нервничаю из-за общих утверждений, что вещи "ужасные идеи".
 CRice25 янв. 2016 г., 00:11
Вы можете просто попросить модель представления определить, что показывать и проработать всю логику ваших ролей в контроллере (или классе, который использует контроллер) и назначить модель представления соответствующим образом. Непосредственная проверка этого по-прежнему работает, но в больших проектах будет менее удобной, и с ней будет сложнее работать.
 CRice25 янв. 2016 г., 00:18
Вы можете сделать звонок, если оно того стоит или нет, в зависимости от вашей ситуации.

Ваш ответ на вопрос