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

本文关键字:一个 动态 对象 类型 net Asp 视图 获取 | 更新日期: 2023-09-27 18:24:29

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

例如:

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

将映射到:

  • 用户John Apple购买Box
  • 物品时钟由供应商卡西欧重新进货,由Johnny购买

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

例如:

  • EnumObjectType。用户:2
  • EnumObjectType.Product:1

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

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

我需要什么

从"日志模型视图"中,我如何在知道其类型(EnumObjectType)及其ID的情况下获得ANY模型的"名称"属性(查询给定对象并使用其属性)?

其他详细信息

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

谢谢!我试图给出我脑海中可能出现的所有细节,但如果有什么遗漏,我很乐意将其添加到

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

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

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

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

public interface MyInterface{
    string Name { get; }
}