0

ユーザーが表示できるが編集できないパラメータと、編集できるパラメータを持つモデルがあります。作者も同じです。そこで、属性を使用[UIHint("Author")]して[UIHint("User")]、次のようないくつかのエディター テンプレートを作成しました。

@inherits System.Web.Mvc.WebViewPage

@if (ViewBag.RoleId > (int)Role.RoleEnum.Author)
{
    @Html.TextBoxFor(m => m, new { disabled = "disabled" })
}
else
{
    @Html.TextBoxFor(m => m)
}

これはほとんど私が望むことをします。デフォルトの EditorFor のように、これらの属性をブール値に適用してチェック ボックスを取得できるようにしたいと考えています。別のテンプレートを作成して のようなものを使用できると思いますが[UIHint("AuthorBool")]、より良いものを考え出すことを望んでいます。

4

1 に答える 1

1

こんにちは。

ユーザーのタイプごとに個別の ViewModel を作成し、[ReadOnly] のデータ注釈を使用できます。しかし、その後、大量の繰り返しの領域に入ります。

個人的には、各データ型の独自のバージョンを作成し、追加のメタデータ データ注釈を使用してカスタマイズする標準的なロール ベースの処理を実装することをお勧めします。最初は少し手間がかかりますが、その後は再利用可能で移植性が高くなります。

例:

[UIHint("MyCustomTemplateControl")]
[AdditionalMetadata("DenyEditUnlessInRole", "Admin")] 
public string MyName { get; set; }

また:

[UIHint("MyCustomTemplateControl")]
[AdditionalMetadata("DenyEditIfInRole", "StandardUser")] 
public string MyName { get; set; }

ユーザー/ロールがこのプロパティへの読み取り/編集アクセスを取得する必要があるかどうかを決定するために、データ型テンプレートが照会する別の場所のクラスでコードベース/データベースベースのルックアップを実行できます。

これは理にかなっていますか?

3 番目のオプションとして、オブジェクト全体のエディター テンプレートを作成し、公開することに関心のあるフィールドとフィールド タイプのみを含めます。

MVC は非常に柔軟です。最終的には、コードをどのように DRY したいかによって決まると思います。

幸運を!ダン。

于 2011-09-23T11:26:03.630 に答える