MVC3编辑器模板适用于多种类型

时间:2011-08-19 14:59:00

标签: asp.net-mvc-3 editortemplates

我有一个模型,其中包含一些用户应该能够看到但不能编辑的参数以及他们应该能够编辑的其他参数。作者也是如此。所以,我使用了[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")]之类的东西,但我希望能找到更好的东西。

1 个答案:

答案 0 :(得分:1)

Hi Oniel,

您可以为每种类型的用户创建单独的ViewModel,并使用[ReadOnly]的数据注释。但随后你进入了大量重复的领域。

就个人而言,我建议您创建自己的每种数据类型版本,并使用其他元数据数据注释来实现基于标准角色的处理以进行自定义。好一点工作开始,然后大量重复使用和高度便携。

示例:

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

或:

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

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

这有意义吗?

作为第三个选项,为整个对象创建一个editortemplate,并且只包含您在公开时感兴趣的那些字段和字段类型。

MVC是如此灵活 - 我想最终它取决于你想要如何制作你的代码。

祝你好运! 丹