我有一个MVC视图也调用了一些部分视图/
有一个可以是不同类型的文档,例如采购订单或发票。每种不同的文档类型都有一些唯一的字段,而另一个没有。它们都具有基础“文档”类的一些属性。
我的视图需要根据特定文档类型显示文档详细信息,然后继续显示所有文档类型的常用元素。
我希望将文档作为文档传递,因此我不必重复代码,然后在显示文档的唯一方面时,只需检测文档的子类型,并使用switch语句显示该类型的特定部分视图。
但是,如果我从文档dbset中提取文档,它似乎不会被检测为采购订单或发票,也不能转换为子类型。
我如何做到这一点?
拿一份文件 - >确定它是哪种类型 - >在部分视图中显示唯一详细信息 - >在部分视图中显示通用详细信息。
因此,可以重用处理公共方面的代码。
某些上下文代码: 主控制器:
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>
等...
答案 0 :(得分:0)
我理解这一点的方法是你有一个继承结构,并且你将基类型传递给 main 视图。在此主视图中,您将呈现公共字段。如果实际的模型类型是派生类,您可以在主视图中进行检查并调用Html.RenderPartial
。
例如:
@if (Model is MyDerivedType) {
Html.RenderPartial("myPartial", (MyDerivedType)Model);
}
myPartial
视图接受MyDerivedType
类型的模型。我的例子可能已经过去了,但希望你能得到这个想法。