2011-08-19 94 views
0

我有一個模型,其中包含一些用戶應該能夠看到但不能編輯的參數以及他們應該能夠編輯的其他參數。作者也是如此。所以,我用[UIHint("Author")][UIHint("User")]屬性,並寫了一對夫婦編輯模板,像這樣:適用於多種類型的MVC3編輯器模板

@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")]之類的東西,但我希望能想出更好的東西。

回答

1

Oniel嗨,

你可以爲每種類型的用戶創建單獨的ViewModels和使用[只讀]數據註解。但是,你會進入大量重複的領域。

就我個人而言,我會建議您創建自己的每個數據類型的版本,並實施標準的基於角色的處理,使用additionalmetadata數據註釋來定製。好的一點工作開始,但然後大規模可重用和高度便攜。

例子:

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

或:

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

您可以在一個類中其他地方執行基於代碼/基於數據庫的查詢,你的數據類型的模板查詢,以對用戶是否決定/角色應該讀取/編輯此屬性的訪問權限。

這是否有意義?

作爲第三個選項,爲整個對象創建一個editortemplate,並且只包含您在曝光時感興趣的那些字段和字段類型。

MVC非常靈活 - 我想最終取決於DRY是如何製作代碼的。

祝你好運! Dan。