2017-03-02 18 views
0

javaプラットフォームからsitecoreに切り替えるので、パラメータに関するいくつかの質問があります。これはjspで簡単に行えますが、私はsitecoreのための解決策を見つけることができません。 (実装は外部パートナーによって行われます)Sitecore MVC:プレースホルダへのパラメータの受け渡し

が私のCSHTMLで、私はプレースホルダ機能を介して他の要素を含む:@ Html.Sitecore()プレースホルダ(「Placholdername」)

要素はプレースホルダーとして含まれています。プレースホルダとして他の要素を含めることもできます。

質問:これらのプレースホルダーとともにいくつかのパラメータを渡すことはできますか? 親要素に特定の変数セット(たとえば "i = 5")があり、この変数をプレースホルダとして含まれる要素に渡し、プレースホルダのプレースホルダとして含まれる要素に渡したいと思いますか?

A:BがプレースホルダとしてBを含み、「i = 5」を渡し、BがCをプレースホルダとして含み、「i = 5」を渡すので、「i」の値は「5」です。私は何を達成したいことはある 次: は <cm:include self="${self}" view="asdf"> <cm:param name="i" value="5"/> </cm:include>

編集:例えば、私が持っている私は単にのようなものを使用することができて、現在のcoremediaプラットフォームではA.

に 『5」に設定しました』次の構造体:変数i = 5を持つページフレームcshtml。次に、グリッドをプレースホルダとしてインクルードし、その変数をグリッドに渡します。グリッドは次にi = i + 5(10に等しくなければならない)のような計算をしてから、ティーザーをプレースホルダーとして入れて、新しいi = 10をティーザーに渡します。

+0

あなたはサイトコアから値を取得しているし、別のビューに渡しますか? –

+0

いいえ、値は基本cshtmlファイルで設定されているため、すべての子要素に渡す必要があります。 – user2626547

+0

私が達成したいのは、次のとおりです。 たとえば、次の構造をとります。変数i = 5のページフレーム。プレースホルダとしてグリッドが含まれ、変数がグリッドに渡されます。グリッドは次にi = i + 5(10に等しくなければならない)のような数学を行い、プレースホルダとしてティーザーを含み、ティーザーに新しいi = 10を渡します。 – user2626547

答えて

0

値モデルではiです。次に、異なるビューまたは部分ビューはすべて、同じモデルを継承する必要があります。

0

レンダリングにはのパラメータを割り当てることはできますが、プレースホルダは使用できません。プレースホルダは穴として見えるべきです。動的に要素を配置することはできますが、パラメータを割り当てることはできません。その議論はここにあります:https://sitecore.stackexchange.com/questions/2098/add-rendering-parameters-to-placeholder/2101

私はあなたの問題を解決するには、少なくとも2つのアプローチを考えることができます:あなたの質問は少し詳細に欠けているが

  1. そうでないように、それは一種の見えますそれらのスペースの中で何をレンダリングするのかを既に知っているので、必ずプレースホルダが必要です。その場合、プレースホルダを使用する代わりに静的にMVCビューをバインドできます。これは一般的な方法ではありませんが、プレースホルダの柔軟性が不要な場合は、Sitecore's latest trainingの素材and elsewhereに記載されています。これは、通常、@Html.Sitecore.Renderingヘルパーを使用して行われます。
  2. 良い古いHttpContext.Items collectionを利用して、グローバル変数を使用することができます。
+0

詳細:ウェブサイト上のすべてのコンポーネントブートストラップグリッドシステムでは、それ自身の幅であることを知る必要があります。 したがって、ページフレームにはプレースホルダ付きのcol-8があるので、プレースホルダに入れた要素に8/12を渡す必要があります。このプレースホルダでは、2つのcol-6をグリッドに配置しました.2つの列には、他のコンポーネントを配置するためのプレースホルダがあります。 グリッドは親の幅として8/12を受け取り、グリッドのコンポーネントに "8/12 * 6/12"を渡す必要があります。そのため、コンポーネントはウェブサイトの幅の4/12を「知っています」。 グリッドがないと、コンポーネントはその幅が8/12であることがわかります。 – user2626547

+1

必要に応じてCSSを使用してコンポーネントのスタイルを設定することはできませんか?例えば'.col-8 .col-6 .component-style'? C#コードでこれらの詳細にアクセスする必要がありますか? – jammykam

0

あなたは、コントローラのアクションメソッドでは、ViewData辞書にパラメータを追加することができます

public ActionResult MyPage() 
{ 
    ContextService.Get().GetCurrent().ViewData.Add("MyKey", "MyValue"); 
    return View(); 
} 

を次に、任意のビューレンダリングはViewDataからパラメータにアクセスすることができます。

@{ 
    var value = ViewData["MyKey"].Value; 
} 

それとも場合をControllerレンダリングを使用して、親ページからViewDataをフェッチするコードを追加し、現在のViewDataインスタンスに追加します。

public ActionResult ChildRendering() 
{ 
    // Get any ViewData previously added to this ViewContext 
    var contextViewData = ContextService.Get().GetCurrent().ViewData; 
    contextViewData.ToList().ForEach(x => ViewData.Add(x.Key, x.Value)); 
    return View(); 
} 

ViewDataのコンテンツは、ビューファイルで利用できるようになりました。

これは、ここで少し詳しく説明します:https://chrisperks.co/2017/03/06/a-workaround-for-missing-viewdata-in-sitecore-mvc/

関連する問題