关于c#:在Asp.net View中获取动态类型对象

Get a dynamic type object in an Asp.net View

我想为 ASP.Net MVC 6 应用程序创建一个日志系统,它将日志消息链接到某些对象。

例如:

  • 用户 {0} 购买了 {1}
  • 项目 {0} 已通过提供商 {1} 进货,购买由 (2)

将映射到:

  • 用户 John Apple 购买了 Box
  • 项目时钟由 vendor卡西欧进货,购买由约翰尼下达

到目前为止,我有一个"日志"方法,它接收一个 IEnumerable 和一个 IEnumerable ids

例如:

  • 枚举对象类型。用户:2
  • EnumObjectType.Product:1
  • ...

我已经拥有了将这些数组保存在数据库中、读取它们、将它们转换为枚举等的所有代码。但是,我不知道如何制作应用程序的"视图"部分。

即转换一个Log.Message(一个实例),例如:
User {0} purchased {1}User John Apple purchased Box

我需要什么?

如何从"日志模型视图"获取任何模型的"名称"属性(查询给定对象,并使用其属性)知道其类型(EnumObjectType)及其 ID?

其他细节

所有可以记录的"模型"都将实现一个包含两个方法的接口,一个返回指向该类的给定实例的链接的 ToLinkStructure(例如 /User/Details/{0})和一个返回快速表示实例的字符串(例如"用户:"this.username)

谢谢!
我试图给出所有我能想到的细节,但如果有什么遗漏我会很高兴补充它


如果我理解正确,您想读取对象的属性,该对象的类型直到运行时才知道。可以这样完成:

1
var value = myObject.GetType().GetProperty("name").GetValue(myObject, null);

更好的选择是,正如您所说,您的类实现了一个接口,就是将该属性放在接口中,并且只接受在您的日志记录函数中实现该接口的实例。

1
2
3
public interface MyInterface{
    string Name { get; }
}