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; }

您可以在数据类型模板查询的其他位置的类中执行基于代码/基于数据库的查找,以决定用户/角色是否应该获得对该属性的读取/编辑访问权限。

这有意义吗?

作为第三个选项,为整个对象创建一个编辑器模板,并且只包含您感兴趣的那些字段和字段类型。

MVC 是如此灵活——我想这最终取决于你想让你的代码如何 DRY。

祝你好运!担。

于 2011-09-23T11:26:03.630 回答