【问题标题】:MVC3 editor template for multiple types适用于多种类型的 MVC3 编辑器模板
【发布时间】:2011-08-19 14:59:00
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc-3 editortemplates


    【解决方案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-13
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多