0

ActionResultユーザーの選択に基づいて、の生地のように作成したいと思います。

私の質問は、それがより一般的な方法で、または少なくとも即興で行うことができるかどうかです。

私はそれがうまくいったことを確認するだけです。

これが私のコードです。

<p>A Partial Control that is initialized on Server-Side</p>
@{
    <h2>@ViewBag.InitializeUserControl</h2>
    Html.RenderAction("ShowGadget",new { actionName = (string)@ViewBag.InitializeUserControl } );      
}

 public class HomeController : Controller
    {
        public ActionResult Index()
        {
            @ViewBag.InitializeUserControl = "InitializeUserControl2"; // IT GOES FROM A DATABASE
            return View(new HomeModel());
        }

        public ActionResult ShowGadget(string actionName)
        {
            var gadgetPresenter = new GadgetPresenter();
            return gadgetPresenter.GetActionResult(actionName);
        }
    }


    public class GadgetPresenter : Controller
    {
        public ActionResult GetActionResult(string actionName)
        {
            if (string.IsNullOrEmpty(actionName))
            {
                return DefaultUserControl();
            }
            else
            {
                if (actionName.Equals("InitializeUserControl"))
                {
                    return InitializeUserControl();
                }
                else if (actionName.Equals("InitializeUserControl2"))
                {
                    return InitializeUserControl2();
                }
                else
                    return DefaultUserControl();
            }
        }

        public ActionResult InitializeUserControl2()
        {
            ColorModel colorModel = new ColorModel
            {
                Width = 100,
                Height = 100,
                RGBColor = "#FF0000"
            };

            return PartialView("UserControls/ColorBlockUserControl2", colorModel);
        }

        public ActionResult InitializeUserControl()
        {
            ColorModel colorModel = new ColorModel
            {
                Width = 200,
                Height = 200,
                RGBColor = "#FF0000"
            };

            return PartialView("UserControls/ColorBlockUserControl", colorModel);
        }

        public ActionResult DefaultUserControl()
        {
            return PartialView("UserControls/DummyControl");
        }

    }
4

1 に答える 1

1

私はあなたがこれでどこに向かっているのか理解していると思いますが、間違ったパターンを強制的に供給している可能性があると思います. したがって、これがデータベースからの値になるため、いくつかのことを確認する必要があります。

  1. 関連するアイテムがあるかどうかにかかわらず、アプリは適切に失敗します。
  2. 保守性を高めるために、構成よりも規則を使用していること。

必要だと思うパターン/テクニックは、モバイル ビュー エンジンです。この例として、MVC3 用の Scott Hanselman のMobile View Engine ( source ) の例を取り上げます。エンジンがどのように .mobile.cshtml ビューを探し、存在しない場合はプレーンな .cshtml ビューにフォールバックするかに注目してください。明らかに、これは現在 MVC4 に組み込まれていますが、この手法はさまざまな目的で実行可能なものです。

これをニーズに合わせて調整し、顧客に関連する保存されたデータベース値のセッション変数または類似のもの (Singleton over Session が私の方法です) を調べて、ビュー プレフィックスを取得し、それ専用のプレフィックスが付けられた別のビューを提供できます。

フォールバックは優雅で、パターンは規約とインジェクションに関するものです。それは確かにあなたの問題を解決するために私がとるアプローチです. 最終的にこのテクニックを使用するかどうかにかかわらず、これが何らかの助けになったことを願っています. 幸運とゴッドスピード!

于 2013-08-08T17:17:51.900 に答える