2015-07-08 16 views
6

Sto eseguendo il codice del rasoio di seguito in un file .cshtml (è una versione semplificata di qualcosa di più complesso che devo raggiungere), ma l'helper renderTestB non sembra essere eseguito.Perché un assistente Razor non può chiamare un altro assistente?

@renderTestA("test string 1", "test string 2"); 

@helper renderTestA(string input1, string input2) 
{ 
    <div> 
     @renderTestB(input1) 
     @renderTestB(input2) 
    </div> 
} 

@helper renderTestB(string input) 
{ 
    <p class="test">@input</p> 
} 

Perché è questo? E c'è un altro modo per ottenere ciò che sto cercando di fare?

Mi rendo conto che potrei duplicare il codice paragrafo all'interno dell'helper renderTestA, ma ovviamente preferirei una soluzione di codice riutilizzabile.

+0

È buona norma introdurre la logica nelle visualizzazioni? Perché non scrivi un aiuto personalizzato? – Matt

+0

Questa è una pratica rimasta dalle vecchie versioni di MVC. È decisamente meglio utilizzare ora gli helper HTML personalizzati. – br4d

+2

Questo funziona bene per me .. quando dici "non sembra eseguire" vuoi dire che non stai vedendo il risultato che vuoi? forse c'è qualcos'altro che non va, dal momento che questo non è il tuo codice reale, è difficile sapere – JamieD77

risposta

0

E qualcosa di simile?

@renderTestA(renderTestB("test string 1"), renderTestB("test string 2")) 

@helper renderTestA(string input1, string input2) 
{ 
    <div> 
     @input1 
     @input2 
    </div> 
} 

@helper renderTestB(string input) 
{ 
    <p class="test">@input</p> 
} 

Si dovrebbe considerare l'utilizzo di Editor/modelli di visualizzazione o aiutanti HTML personalizzato, invece, come la funzionalità @helper è stato utilizzato di nuovo prima di queste caratteristiche è diventato la norma.

Per quanto riguarda il motivo per cui non è possibile nidificarli. Introduce una serie di problemi che sono facilmente evitati usando la sintassi che ho suggerito sopra. Ad esempio ... se si dispone di un ciclo circolare di helper nidificati, potrebbe facilmente causare un overflow dello stack.

Problemi correlati