Asp.net mvc 3 用于多种类型的MVC3编辑器模板

Asp.net mvc 3 用于多种类型的MVC3编辑器模板,asp.net-mvc-3,editortemplates,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 { disable

我有一个模型,其中有一些参数,用户应该可以看到,但不能编辑,还有一些参数应该可以编辑。作者也是如此。因此,我使用了
[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)
}

这几乎是我想要的。我希望能够将这些属性应用于布尔值并获得复选框,就像默认的编辑器for一样。我想我可以制作另一个模板,并使用类似的
[UIHint(“AuthorBool”)]
,但我希望能找到更好的模板。

嗨,Oniel,

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

就个人而言,我建议您为每种数据类型创建自己的版本,并使用额外的元数据数据注释实现基于角色的标准处理。好的,一开始需要做一点工作,但之后大量的可重用性和高度的可移植性

例如:

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

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

这有意义吗

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

MVC是如此灵活——我想最终它取决于你想让你的代码变得多么枯燥

祝你好运! 丹。

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