То, как вы сформулировали вопрос, боюсь, любой ответ приведет к довольно сложному представлению. Решение о том, какое представление отображать (и какую модель представления строить) в зависимости от ролей пользователя, является ответственностью контроллера.
РЕДАКТИРОВАТЬ 1: Ответ на комментарий
Не могли бы вы сделать что-то подобное?
<% if (Model.AllowEdit) { %>
<%= Html.TextBoxFor(x => x.SomeProperty); %>
<% } else if (Model.AllowView) { %>
<%= Html.Encode(Model.SomeProperty) %>
<% } else { %>
<span>You may not view this property.</span>
<% } %>
Это может привести к вспомогательному элементу управления.
public static ExtensionsOfHtmlHelper
{
public static MvcHtmlString DynamicTextBox(this HtmlHelper html, Func<TModel, object> lambda, bool edit, bool view)
{
if (edit)
{
return html.TextBoxFor(lambda);
}
else if (view)
{
return html.LabelFor(lambda);
}
else
{
return MvcHtmlString.Create("<span>You may not view this value.</span>");
}
}
}
Тогда, по вашему мнению,
<%= Html.DynamicTextBox(x => x.SomeProperty, Model.AllowEdit, Model.AllowView) %>
Что-то близкое к этому должно работать.