Могу ли я использовать MVC Global Action Filter для отключения полей формы? - PullRequest
4 голосов
/ 20 октября 2010

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

Некоторые идеи на данный момент:

  1. Некоторая комбинация глобального фильтра действий и редактированияшаблоны.
  2. Пользовательский помощник Html, что-то вроде Html.SecureTextBox и т. д. *

Я склоняюсь к номеру 1, но мне интересно, если кто-нибудь из вас, ребята /Галс с большим опытом работы с MVC решил эту проблему лучше.

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Я согласен с использованием модели базового представления или, возможно, только интерфейса с типом свойства CanEdit. Если вы идете по маршруту интерфейса, вы можете установить свойство в ActionFilter в методе OnActionExecuted.

Чтобы привязать его к представлению, создать новый HtmlHelper было бы довольно просто. Я бы использовал TextBoxFor в качестве базового класса, так как он имеет доступ к модели представления. Затем вы можете проверить свойство и создать необходимый атрибут HTML. Однако, пройдя этот маршрут, вам нужно будет создать нового помощника для каждого типа элемента управления вводом, который вам нужен (текстовое поле, список выбора и т. Д.).

Не зная всех подробностей того, что вы делаете, гораздо проще было бы не предоставлять кнопку «Сохранить» для пользователей только для чтения. Кнопка Сохранить будет управляться одним свойством в модели представления (или ViewData, если хотите).

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

0 голосов
/ 20 октября 2010

Я бы предпочел установить переменную в модели общего базового представления (или ViewData), используя глобальный фильтр действий, а затем использовать немного jquery для динамического отключения полей ввода, удаления кнопок и т. Д.

$ (': input'). Attr ('readonly', true);

...