0

いくつかの部分ビューも呼び出す 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>

等...

4

1 に答える 1

0

私がこれを理解する方法は、継承構造があり、基本型をメインビューに渡しているということです。このメインビューから、共通フィールドをレンダリングしています。実際のモデル タイプが派生クラスである場合は、メインビュー内でチェックを行い、 を呼び出すことができますHtml.RenderPartial

例えば:

@if (Model is MyDerivedType) {
    Html.RenderPartial("myPartial", (MyDerivedType)Model);
}

myPartialビューが type のモデルを受け入れる場所MyDerivedType。私の例はおそらくつまらないかもしれませんが、うまくいけばアイデアが得られます。

于 2012-08-01T20:20:57.580 に答える