Динамические представления на основе моделей представлений - PullRequest
0 голосов
/ 29 марта 2010

У меня есть приложение asp.net mvc 2. Мне нужно отображать одну и ту же страницу каждому пользователю. Но каждый пользователь имеет разные права на данные. IE некоторые могут видеть, но не редактировать некоторые данные, некоторые не могут ни редактировать, ни видеть данные. В идеале данные, которые нельзя увидеть или отредактировать, являются пробелами в представлении. Из соображений безопасности я хочу, чтобы мои видовые модели были как можно меньше. Под этим я подразумеваю, что если поле нельзя увидеть или отредактировать, это поле не должно быть в модели представления. Очевидно, я могу написать представление для каждой модели представления, но это кажется расточительным. Так вот моя идея / список пожеланий

Могу ли я украсить viewmodel с атрибутами и подключиться к событию предварительного рендеринга html помощников и сказать ему делать   вместо ???

Могу ли я получить вывод html helpers   для записей, не найденных в модели представления ??

или

Могу ли я легко преобразовать представление, встроенное в код, затем программно построить разметку и затем поместить в механизм рендеринга для обработки и просмотра в виде html на стороне клиента ??

1 Ответ

0 голосов
/ 29 марта 2010

То, как вы сформулировали вопрос, боюсь, любой ответ приведет к довольно сложному представлению. Решение о том, какое представление отображать (и какую модель представления строить) в зависимости от ролей пользователя, является ответственностью контроллера.

РЕДАКТИРОВАТЬ 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) %>

Что-то близкое к этому должно работать.

...