Я пытаюсь реализовать требование, которое позволит мне изменить состояние элемента управления html на основе роли пользователя или другой бизнес-логики. Например, некоторые пользователи не должны иметь возможность редактировать определенное свойство модели, или в некоторых случаях я даже не хочу, чтобы элемент управления отображал html DOM.Могу ли я модифицировать метаданные модели внутри фильтра действий?
В HTML-хелперах метаданные могут сообщать помощнику, нужно ли отображать элемент управления, или он может сделать его доступным только для чтения/отключенным. Вместо того, чтобы повторно изобретать колесо здесь, я просто хочу использовать то, что уже на месте, изменив метаданные внутри фильтра действий на основе логики во время выполнения. Мне не нужна эта логика в моем представлении, и я не хочу создавать пользовательские помощники для каждого элемента управления html, если мне не нужно.
Что я пытался сделать, это создать фильтр действий для обработки оценивая логические правила на моем бизнес-уровне, а затем внося изменения в метаданные для данного model.property.
Проблема в том, что мои модификации в метаданных, похоже, не делают это для представления. Мне кажется, что мои изменения в метаданных внутри фильтра действий не по ссылке, поэтому я не изменяю тот же экземпляр, который используется для представления?
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var trans = filterContext.Controller.ViewData.ModelMetadata.Properties.Where(e => e.PropertyName == "Transaction").FirstOrDefault();
trans.DisplayName = "Show FOO!";
}
Что я делаю неправильно?
Спасибо, я понял это после некоторых проб и ошибок. В результате я создал пользовательский поставщик метаданных, который позволяет мне изменять свойства по мере необходимости. – JBeckton