我为ASP.NET MVC应用程序创建了一个审计表来跟踪关键更改和操作。我想在视图上以易于阅读的格式向授权用户呈现此表的内容。在ASP.NET MVC中创建一个混合模型(与其他模型的位)?
审核表(简体),像这样:
ID (int) | StaffID (int) | Action (string) | Timestamp (datetime)
-----------------------------------------------------------------
1987 | 27 | Delete entry: 9 | 2010-02-22 12:30:12
1988 | 34 | Add user: 912 | 2010-02-22 12:48:19
到目前为止,我刚刚被提出,使用默认的“列表”视图中的MVC但我们正在朝着发展的结束和我想通过展示员工姓名而不是StaffID来整理这一观点。
起初,我使用创建一个包含审计和工作人员,并通过“混合模式”的做法,即为了视图:
public class AuditModel
{
public AuditModel(List<Audit> AuditEntries, List<Staff> AllStaff)
{
this.Audit = AuditEntries;
this.Staff = AllStaff;
}
public List<Audit> Audit { get; private set; }
public List<Staff> Staff { get; private set; }
}
[AcceptVerbs("GET")]
public ActionResult ViewAuditTrail()
{
var Audit = (from a in db.Audits orderby a.Timestamp descending select a).ToList();
var Staff = (from s in db.Staffs select s).ToList();
return View(new AuditModel(Audit, Staff));
}
但是,这会导致在视图中混乱:
<%
foreach (var Entry in Model.AuditEntries)
{
var StaffDetails = Model.AllStaff.Where(s => s.ID == Entry.StaffID).SingleOrDefault();
/* output HTML */
}
%>
所以我想我要做的就是创建一个新的模式具有以下属性:
- ID (INT) - Audit.ID
- StaffName(字符串) - Staff.ID [S => s.StaffID == Staff.ID]
- 动作(字符串) - Audit.Action
- 时间戳(日期时间) - Audit.Timestamp
但我想在控制器中做到这一点,并将它作为ToList()传递给视图,这样我的视图可以变得更清晰和更简单。
任何提示?
Upvoted因为它引起了我的注意审计数据的完整性。理论上,员工永远不应该被删除(应用程序拥有自己的员工数据存储),但我喜欢ID和名称的结合。 我仍然想知道如何创建自己的“混合模型”,因为我认为我需要将它用于应用程序的其他部分。 – 2010-02-22 13:20:38