Я создал таблицу аудита для приложения 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. ,
Изначально я использую подход создания гибридной модели, которая содержит как Audit, так и Staff, и передаю ее в представление:
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
- Метка времени (datetime) - Audit.Timestamp
Но я хочу сделать это в контроллере и передать его представлению в виде ToList (), чтобы мое представление могло быть чище и проще.
Любые советы?