SparkのこのMVCビューコードの同等の構文は何ですか?
-
05-07-2019 - |
質問
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>
解決
The
<% if (UserService.IsAuthenticated && !Model.Post.IsDeleted) { %>
<% Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" }); %>
<% } %>
and
<if condition="UserService.IsAuthenticated && !Model.Post.IsDeleted">
#Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
</if>
および<!> lt; test if = <!> quot; <!> quot; <!> gt;バリエーションはすべて機能し、ほぼ同一のコードを生成するはずです:
if (UserService.IsAuthenticated && !Model.Post.IsDeleted)
{
Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
}
$ {UserService.IsAuthenticated}と$ {Model.Post.IsDeleted}を出力して、条件が常に真であるとは限らないことを絶対に確認してください。
わかりました-間違っている別のメディアで確認されました... <!> quot; Reply <!> quot; partialはReply.ascxやReply.aspxのようなWebFormsビューですか? WebFormsには、デフォルトで現在のHttpContext応答出力に直接出力されるため、出力をスプールまたはレイヤー化するビューエンジンでこれらのパーシャルをインターリーブすることが困難になるという問題があります。
Sparkサンプルの1つでそれを回避する方法がありますが、少し注意が必要です。
他のヒント
テストで試してくださいif = <!> quot; <!> quot;構文
<test if="UserService.IsAuthenticated && !Model.Post.IsDeleted">
${Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });}
</test>
TwitterでのLouisの助けのおかげで、問題は、呼び出される部分が.sparkファイルではなく.ascxファイルであるということでした。古い未変換の.ascxファイルはまだ削除していません。 Reply.ascxが削除されると、すべてが期待どおりに機能しました。