我有一个 MVC 视图,它也调用了一些部分视图/
有一个可以是不同类型的文档,例如采购订单或发票。每种不同的文档类型都有一些独特的字段,而另一种则没有。它们都具有基本“文档”类的一些属性。
我的视图需要根据文档的特定类型显示文档详细信息,然后继续并显示所有文档类型具有的公共元素。
我想将文档作为 Document 传递,这样我就不必重复代码,然后在显示文档的独特方面时,只需检测文档是哪个子类型,并使用 switch 语句来显示该类型的特定部分视图。
但是,如果我从 Documents dbset 中提取 Document,它似乎不会被检测为采购订单或发票,并且无法转换为子类型。
我该如何做到这一点?
获取一个文档 -> 确定它是哪种类型 -> 在部分视图中显示唯一详细信息 -> 在部分视图中显示通用详细信息。
所以这样处理共同方面的代码可以被重用。
上下文的一些代码:主控制器:
public ActionResult Main(string doctype, int id)
{
ActionCenterViewModel acvm = new ActionCenterViewModel();
acvm.Document = db.Documents
.Where(i => i.ID == id)
.SingleOrDefault();
return View(acvm);
}
主视图:
@model Production.ViewModels.ActionCenterViewModel
@{
ViewBag.Title = "Main";
}
<link rel="stylesheet" type="text/css" href="@Url.Content("~/Content/actioncenter.css")" />
@Html.Action("DisplayDocumentDetails", Model.Document)
次要动作:
public ActionResult DisplayDocumentDetails(Document doc)
{
switch (doc.DocumentType)
{
case "WorkOrder":
return View("_DisplayWorkOrderDetails");
}
return null;
}
次要观点:
@model Production.Models.WorkOrder
<div id="documentDetails">
<div class="actionCenterDocInfoLabel fLeft">WorkOrder:</div>
<div class="actionCenterDocInfoValue fLeft"> @Model.ID</div>
<div class="actionCenterDocInfoLabel fLeft leftMargin20">Vendor:</div>
<div class="actionCenterDocInfoValue fLeft"> @Model.Vendor.FriendlyName</div>
ETC...