나는 또한 어떤 부분보기/ 는 서로 다른 속성
는 예를 들어, 다양한 유형의 구매 주문 또는 송장이 될 수있는 문서가를 호출하는 MVC보기를 표시하는 기본 유형의 하위 유형을 결정합니다. 서로 다른. 서 유형에는 고유 한 필드가있어 각각에는 고유하지 않습니다. 그들은 모두 기본 "Document"클래스의 속성을 가지고 있습니다.내보기는 문서의 특정 유형에 따라 문서 세부 사항을 표시해야하지만 계속해서 모든 문서 유형이 갖는 공통 요소를 표시해야합니다.
코드를 복제 할 필요가 없도록 문서를 전달하고 문서의 고유 한 측면을 표시 할 때 문서의 하위 유형을 감지하고 스위치를 사용하십시오 문을 사용하여 해당 유형에 대한 특정 부분 뷰를 표시합니다.
그러나 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>
등 ...
저는 실제로 Html.Action을 dpong하고 컨트롤러에서 스위치를 사용하고 있습니다! 그러나 " 'Production.Models.WorkOrder'에 'doc'(실제 'Production.Models.Document'유형이 있음)을 캐스팅 할 수 없습니다." –
'Document'와 'WorkOrder'는 어떻게 관련되어 있습니까? – Matthew
Document는 WorkOrder의 기본 클래스입니다. 따라서 WorkOrder는 Document에서 파생됩니다. 동일한 페이지를 사용해야하는 인보이스와 같은 다른 유형의 문서가있을 것입니다. –