Я создал таблицу аудита для приложения 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]
- Action (строка) - Audit.Action
- Отметка (DateTime) - Audit.Timestamp
Но я хочу сделать это в контроллере и передать его в виде как ToList(), чтобы мой взгляд мог быть чище и проще.
Любые советы?
Приобретено, потому что это привлекло мое внимание целостности данных аудита.Теоретически персонал никогда не должен удаляться (у приложения есть собственное хранилище данных персонала), но мне нравится комбинированный approrach идентификатора и имени. Я все равно хотел бы выяснить, как создать свою собственную «гибридную модель», хотя, я думаю, мне нужно будет использовать ее для других частей приложения. –