3

私は以前にこの問題を抱えていて、それを機能させることができませんでしたが、今回はそれを回避する別の方法がなく、本当にこれを機能させる必要があります.

RSS フィードを読み取り、単純な html で出力する単純な ascx コントロールがあります。背後にあるコードは非常に単純です。

次に、ページ全体をレンダリングするかみそりスクリプトがあり、そのページの特定の領域内に ascx コントロールを追加したいと考えています。

次のようにテンプレートに直接コントロールを追加すると:

<umbraco:macro Alias="SubnavRenderer" language="cshtml" runat="server"></umbraco:macro>

うまく機能しますが、ブログのエントリがコンテンツの外に表示されます。

したがって、かみそりスクリプトの内部から、次のようなことを行います。

foreach (var item in Model.Children) 
    {
        ...
        else if(item.NodeTypeAlias == "Blog")
             {
               @Html.Raw(umbraco.library.RenderMacroContent("<?UMBRACO_MACRO macroAlias=\"BlogRenderer\"></?UMBRACO_MACRO>", Model.Id));
             } 
        }

これにより、空の div がレンダリングされますが、コンテンツはレンダリングに失敗するため、マクロは半分しか機能していません。ページのライフサイクルに関連していると思われます。マクロには、おそらくスキップされるなどの page_load イベントがあります。

何か案は?どうもありがとう

4

1 に答える 1

0

あなたの投稿を最初に読んだとき、マクロが必要な場所に asp:PlaceHolder を追加し、Page PreInitイベントを使用してコントロールを動的に生成し、プレースホルダーにポップすることをお勧めします。

また、 uQuery (ucomponents に付属し、4.8 から Umbraco コアに含まれています)を使用することをお勧めします。これにより、剃刀スクリプトは次のように簡素化されます。

Model.GetNodesByType("ブログ");

しかし、あなたの html.raw コマンドを見ると、おそらくそれが問題です - Model.Idの代わりにitem.Idを使用すべきではありませんか?

編集

マクロ宣言をエスケープしてみることができます-それは以前はうまくいきました; runat="server" 属性を追加することもできます。

于 2012-08-21T22:34:28.277 に答える