我有一个asp.net mvc 2应用程序。我需要向每个用户显示相同的页面。但每个用户对数据拥有不同的权限。 IE有些可以看到但不能编辑某些数据,有些无法编辑也无法查看数据。理想情况下,无法查看或编辑的数据是视图上的空白。出于安全考虑,我希望我的viewmodels尽可能稀疏。我的意思是,如果无法查看或编辑字段,则该字段不应位于视图模型上。显然我可以为每个视图模型编写视图,但这看起来很浪费。所以这是我的想法/愿望清单
我可以使用属性装饰viewmodel并挂钩到html助手的预渲染事件,并告诉它做
而不是???
我是否可以为viewmodel上找不到的条目输出html助手?{/ p>?
或
我可以轻松地将构建的视图转换为代码然后编程构建标记,然后放入渲染引擎进行处理并在客户端以html的形式查看吗?
答案 0 :(得分: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) %>
接近这一点应该有用。