0

asp.net mvc 2 アプリがあります。各ユーザーに同じページを表示する必要があります。ただし、各ユーザーはデータに対して異なる権利を持っています。IE には、表示できるが編集できないデータもあれば、データを編集または表示できないものもあります。理想的には、表示も編集もできないデータは、ビュー上の空白です。セキュリティ上の理由から、ビューモデルをできるだけまばらにしたいと考えています。つまり、フィールドを表示または編集できない場合、そのフィールドはビューモデルにあるべきではありません。もちろん、ビューモデルごとにビューを書くことはできますが、それは無駄に思えます。だからここに私のアイデア/ウィッシュリストがあります

ビューモデルを属性で装飾し、html ヘルパーのレンダリング前イベントにフックして、 代わりに実行するように指示できますか?

 ビューモデルで見つからないエントリの html ヘルパーを出力できますか??

また

ビルドされたビューをコードに簡単に変換し、プログラムでマークアップを作成してから、クライアント側で処理して html として表示するためにレンダリング エンジンに入れることはできますか??

4

1 に答える 1

0

あなたが質問を表現した方法では、どんな答えも非常に複雑な見方になるのではないかと思います. ユーザーの役割に応じて、どのビューを表示するか (およびどのビューモデルを構築するか) を決定するのは、コントローラーの責任です。

編集 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) %>

それに近い何かがうまくいくはずです。

于 2010-03-29T16:16:26.157 に答える