我爲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