0

WebFormsプロジェクトをMVCに移動していて、デザインに苦労しています。私のアプリの基本的な表示は_Layoutにあります。ページは4つの部分(たとえば、部分A、B、C、およびD)に分割され、3(A、B、C)にはhtmlのみが含まれ、1つ(D)は動的です。@RenderBodyを使用してパートDのコンテンツを取り込みましたが、現在、他のパーツが変更されており、これらのパーツ用に個別のコントローラーが必要です。コンテンツを_Layoutに表示するための最良の方法は何ですか?

@ Html.RenderPartial / @ Html.Partial / @ Html.RenderAction / @ Html.Action?

現在、-@ Html.Action( "Index"、 "CController")を使用してパートCを置き換えようとしています。

ただし、これは機能していません。

CControllerのIndex.cshtmlでは、Layout = nullで、最初は_Layout.cshtmlを指すように設定されていましたが、これにより問題が発生することをここで読みました。

CパーツをCControllersビューに配置した後、前に表示した基本的な_Layoutページはイベント表示されません。

これがCControllerのIndex.cshtmlです-

<div id="noteContainerDiv">
    Here goes all the data to display
</div>

そしてこれがCController.csのコードです-

public class CController : Controller
{        
    public ActionResult Index()
    {
        return PartialView();
    }

}

誰かがこれを設計する正しい方法を提案できますか?

4

2 に答える 2

0

できることは、サブビュー(Dと呼ぶもの)のビューモデルを用意し、レイアウトビューからこのビューモデルを渡すことです。

つまり、_Layoutで次のようなことを行います。

@Html.Partial("_SubviewD", Model.SubviewDModel)

次に、明らかにコントローラーで、このサブビューモデルを初期化し、モデルに含める必要があります(または、ViewBagに含める必要があります。悪であることが示唆されたことをお詫びします)。すべてのコントローラーを変更せずにこれを行う方法を見つけることもできます(たとえば、基本Controllerクラスを介してオーバーライドしますOnActionExecuted)。

于 2012-06-15T14:23:41.710 に答える
0

これを行うには多くの方法があります。しかし、私はあなたの最初のアプローチに固執します。

CControllerインデックスアクションが完全な結果ではなくPartialViewResultを返すようにします。

部分ビューのレイアウトは設定しません。したがって、CControllerインデックスアクションには、次のようなものがあります。

var model = ....
return this.PartialView("NameOfYourPartialView", yourModel);

そして、あなたが電話するとき

@Html.Action("Index", "CController")

すべてが大丈夫なはずです、かっこいいですか?

于 2012-06-15T14:36:41.040 に答える