3

WebForms ビュー エンジンを使用する MVC プロジェクトにこのコードがあり、それを Spark に変換しようとしています。パーシャルを条件付きで呼び出してビュー データを渡すにはどうすればよいですか?

<% if (UserService.IsAuthenticated && !Model.Post.IsDeleted) { %>
    <% Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" }); %>
<% } %>

これを試してみました(無駄に、他のすべてのコンテンツの前にパーシャルをレンダリングします):

<if condition="UserService.IsAuthenticated && !Model.Post.IsDeleted">
    #Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
</if>
4

3 に答える 3

6

<% if (UserService.IsAuthenticated && !Model.Post.IsDeleted) { %>
    <% Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" }); %>
<% } %>

<if condition="UserService.IsAuthenticated && !Model.Post.IsDeleted">
    #Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
</if>

<test if=""> バリエーションはすべて機能し、ほぼ同じコードが生成されます。

if (UserService.IsAuthenticated && !Model.Post.IsDeleted) 
{ 
    Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
}

${UserService.IsAuthenticated} と ${Model.Post.IsDeleted} を出力して、条件が常に真であるとは限らないことを確認してみてください。


わかりました-別のメディアで確認されましたが、それは正しくありません...「返信」部分が Reply.ascx や Reply.aspx のような WebForms ビューである可能性はありますか? WebForms には、デフォルトで出力が現在の HttpContext 応答出力に直接送られるという問題があり、出力をスプールまたはレイヤー化するビュー エンジンでこれらのパーシャルをインターリーブすることが困難になります。

Spark サンプルの 1 つにこれを回避する方法がありますが、少し注意が必要です。

于 2009-06-17T04:53:47.667 に答える
1

test if="" 構文を試してください

<test if="UserService.IsAuthenticated && !Model.Post.IsDeleted">
    ${Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });}
</test>
于 2009-06-17T03:09:20.400 に答える
1

Twitter での Louis の助けのおかげで、問題は呼び出されたパーシャルが .spark ファイルではなく .ascx ファイルだったということでした。古い未変換の .ascx ファイルをまだ削除していませんでした。Reply.ascx が削除されると、すべてが期待どおりに機能しました。

于 2009-06-17T05:06:11.537 に答える