O que é a sintaxe equivalente para este código de exibição MVC em faísca?
-
05-07-2019 - |
Pergunta
Eu tenho esse código em um projeto MVC usando os WebForms visualizar motor e eu estou tentando convertê-lo sobre a Spark. Como posso condicionalmente chamar um parcial e passá-lo visualizar os dados?
<% if (UserService.IsAuthenticated && !Model.Post.IsDeleted) { %>
<% Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" }); %>
<% } %>
Tentámos este (sem sucesso, ele processa a parcial antes todos os outros conteúdos):
<if condition="UserService.IsAuthenticated && !Model.Post.IsDeleted">
#Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
</if>
Solução
O
<% if (UserService.IsAuthenticated && !Model.Post.IsDeleted) { %>
<% Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" }); %>
<% } %>
e
<if condition="UserService.IsAuthenticated && !Model.Post.IsDeleted">
#Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
</if>
eo
if (UserService.IsAuthenticated && !Model.Post.IsDeleted)
{
Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });
}
Talvez tente produzir $ {UserService.IsAuthenticated} e $ {Model.Post.IsDeleted} para ser absolutamente certo de que a condição não é sempre verdade?
Ok - confirmada em outro meio que é incorreta ... É possível o "Responder" parcial é um WebForms ver como Reply.ascx ou Reply.aspx? Há um problema com WebForms na medida em que de saída por padrão irá diretamente para a corrente de saída de resposta HttpContext, o que torna difícil para intercalar essas parciais com motores vista que carretel ou camada de saída.
Há uma maneira de contornar isso em uma das amostras de ignição, mas é um pouco complicado.
Outras dicas
Tente com o teste if = "" sintaxe
<test if="UserService.IsAuthenticated && !Model.Post.IsDeleted">
${Html.RenderPartial("Reply", new ReplyViewModel { Id=Model.Post.PostId, CssClass="respond" });}
</test>
Graças à ajuda Louis' no Twitter, o problema era que o ser parcial chamado era um arquivo .ascx e não um arquivo .spark. Eu ainda não tinha eliminado o velho, ficheiro.ascx não convertido. Uma vez que o Reply.ascx foi excluído, tudo funcionou como esperado.