2010-03-29 51 views
0

我有一個asp.net mvc 2應用程序。我需要爲每個用戶顯示相同的頁面。但是每個用戶對數據擁有不同的權利。有些IE可以看到但不能編輯一些數據,有些不能編輯或者看不到數據。理想情況下,無法看到或編輯的數據是視圖上的空白。出於安全原因,我希望我的視圖模型儘可能稀疏。我的意思是,如果一個字段不能被看到或編輯,該字段不應該在視圖模型上。很明顯,我可以爲每個視圖模型編寫視圖,但這看起來很浪費。所以這裏是我的想法/願望清單基於視圖模型的動態視圖

我可以裝飾視圖模型的屬性,並掛鉤到HTML幫助器的預渲染事件,並告訴它做 而不是?

我可以在viewmodel上找不到條目的HTML幫助器輸出 

可以我很容易地轉換內置到代碼然後programaticlly建立標記,然後視圖放入渲染引擎進行處理並viewd爲html在客戶端??

回答

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

一些接近十歲上下,以應工作。

+0

正確,但我想要一個視圖與許多viewmodels。還有一種智能化的方法。否則它手工製作很多意見。不僅可以創建視圖模型,而且可以創建視圖。它們緊密耦合。我希望我的視圖能夠被視圖模型所塑造,並依賴於它。並且肯定不是相反 – Joe 2010-03-29 16:41:32

+0

@Joe,請參閱編輯答案 – 2010-03-29 19:53:14

+0

是的,我正在考慮更多。也許我可以 一)創建我的控制器功能不會裝點 二)把那些角色在屬性上的意見 C)的助手查看當前角色和角色,如果不要匹配,那麼輸出什麼,明確現場的信息 這些屬性在視圖模型中的字段將是 [CanViewOnly(Roles =「aRole」)] [NoView(Roles =「anotherRole」)] – Joe 2010-03-29 20:09:45