2010-03-29 47 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