在Asp.net视图中获取动态类型对象

时间:2014-09-26 06:20:31

标签: c# asp.net-mvc razor asp.net-core-mvc

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

例如:

  • 用户{0}购买了{1}
  • 项目{0}已重新加入提供商{1},由(2)
  • 进行购买

哪个会映射到:

  • 用户John Apple购买了Box
  • 项目时钟由供应商卡西欧补充,由Johnny
  • 购买

到目前为止我所拥有的是" Log"接收IEnumerable的方法和IEnumerable ID

例如:

  • EnumObjectType.User:2
  • EnumObjectType.Product:1
  • ...

我已经拥有了所有代码,可以在数据库中保存这些数组,阅读它们,将它们转换为枚举等等。但是,我不知道如何制作" View"部分申请。

即,转换Log.Message(一个实例),例如: User {0} purchased {1}User <a href="#">John Apple</a> purchased <a href="#">Box</a>

我需要什么?

来自&#34;日志模型视图&#34;我怎样才能获得&#34;名称&#34;任何模型的属性(查询给定对象,并使用其属性)知道其类型(EnumObjectType)及其ID?

其他详情

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

谢谢! 我试图提供所有可能在我脑海中浮现的细节,但是如果有什么不足之处,我会很高兴添加它

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望在运行时读取具有您不知道的类型的对象的属性。这可以这样做:

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

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

public interface MyInterface{
    string Name { get; }
}