0

Webフォームのマルチビュー機能を模倣しようとしています。考えられる唯一の方法は、PartialViewをViewDataオブジェクトに配置することです。次のようなもの:

コードを表示:

<%= ViewData["PartialViewPlaceholder"] %>

コントローラーコード:

if(//condition){    
    ViewData["PartialViewPlaceholder"] = partialView1;
} else {
    ViewData["PartialViewPlaceholder"] = partialView2;
}

これについてどうしますか?

4

1 に答える 1

1

ViewDataは、マークアップとレンダリングコードを含むビュー自体ではなく、実際のデータを含むことを目的としています。あなたがこれを行うことは不可能でしょうか:

public ActionResult MyActionMethod()
{
    var model = new MyModel();
    model.UsePartialView1 = false; // Tell the view not to use Partial View 1
    return View("MyView", model);
}    

そしてビューでMyView

<% if (Model.UsePartialView1) 
       Html.RenderPartial("PartialView1", Model);
   else
       Html.RenderPartial("PartialView2", Model); %>

これにより、コントローラーによって設定された条件に応じて、同じモデルがレンダリングされるかPartialView1、同じモデルが使用されます。PartialView2

または、通常のビューではなく、コントローラーから直接モデルを含む部分ビューを返すには、次のようにします。

public ActionResult MyActionMethod()
{
    var model = ...
    ViewData["MyViewData"] = ...
    return PartialView("PartialView1", model);
}

これにより、PartialViewPartialView1がクライアントに直接返されます。結果はおそらくHTMLページ全体ではないため、これはAJAXシナリオで主に役立ちます。部分ビューは.ascxファイルです。

于 2010-08-18T16:08:22.997 に答える