首先使用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/