首先使用Identity 2的.NET MVC应用程序EF代码

每个应用程序用户都属于一个特定的user_type(ApplicationUser.user_type)。 (应用程序也使用身份角色,但它们完全独立于此user_type)。
另外,我在模型和视图模型的属性上广泛使用Display属性,其用法如下:

[Display(Name="some literal"]
public string someProperty { get; set; }


并在视图中:

@Html.LabelFor(model => model.someProperty)


要么
    @ Html.DisplayNameFor(模型=> model.someProperty)

但是现在,如果登录的用户具有特定的user_type(“客户端”),则在某些情况下,我需要显示不同的内容。

实施此方法的最佳方法是什么?我想也许可以自定义Display属性,使其接受参数“ userType”,这样我就可以用以下方式修饰属性:

[Display(Name="This will be shown to users with user_type: Client", UserType="Client"]
[Display(Name="This will be shown to everyone else"]
public int myProperty { get; set; }


或类似的东西...但我不知道该怎么做...任何帮助表示赞赏

最佳答案

在我看来,您似乎试图将太多的逻辑/责任放在一个地方。

我确认您会设法解决此情况,但是,如果这样做,您将冒着一个纠结的属性的风险,该属性的行为将取决于各种外部参数。您添加的越多,它将变得越复杂。那可能很难维持。

我不喜欢“保持简单”,但我认为通过在维护中保持简单,它确实适用于此。

IMO,您有两种选择可以帮助您:


为此客户端页面创建一个完整的新视图和一个模型
向包含字符串的(视图)模型添加属性。
将字符串添加到页面并用剃刀处理。
使用Viewbag或类似的临时数据容器


因此,总而言之:我不认为扩展Display属性是考虑上述一种(或另一种)方法的方法。

关于c# - .NET C#-自定义显示属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57084344/

10-10 04:53
查看更多