2013-07-30 13 views
7

Ho un modello con una proprietà object, e un numero ID tipo di valore, e vogliono creare un diverso controllo editore a seconda del numero tipo di valore.Razor @helper funzioni non di rendering Html alcun

Sto provando a usare contrasti a rasoio @help, tuttavia nessuno dei contenuti degli helper viene visualizzato sulla pagina.

@helper noEditor() 
{ 
    <div>noEditor</div> 
} 
@helper stringEditor() 
{ 
    <div>stringEditor</div> 
} 
@helper intEditor() 
{ 
    <div>intEditor</div> 
} 
@helper boolEditor() 
{ 
    <div>boolEditor</div> 
} 
@helper collectionEditor() 
{ 
    <div>collectionEditor</div> 
} 

@switch(Model.ValueTypeId) 
{ 
    case 1: stringEditor(); break; 
    case 2: intEditor(); break; 
    case 3: boolEditor(); break; 
    case 4: collectionEditor(); break; 
    default: noEditor(); break; 
} 

Quando metto un punto di interruzione sulla @switch posso vedere il passaggio debugger al helper corretto, ma salta subito alla fine della funzione poi esce l'interruttore, non viene reso.

Qualche idea su quello che sto facendo male qui?

risposta

18

per stampare testo con il rasoio è necessario utilizzare il simbolo @. Se si modifica il codice per

@switch(Model.ValueTypeId) 
{ 
    case 1: @stringEditor() break; 
    case 2: @intEditor() break; 
    case 3: @boolEditor() break; 
    case 4: @collectionEditor() break; 
    default: @noEditor() break; 
} 

dovrebbe funzionare.

alternativa è possibile utilizzare Response.Write come questo:

@switch(Model.ValueTypeId) 
{ 
    case 1: Response.Write(stringEditor()); break; 
    case 2: Response.Write(intEditor()); break; 
    case 3: Response.Write(boolEditor()); break; 
    case 4: Response.Write(collectionEditor()); break; 
    default: Response.Write(noEditor()); break; 
} 

che è fondamentalmente ciò che il @ fa in rasoio.

+0

E 'sempre qualcosa di semplice come questo che mi fa strappare i capelli fuori. Farò in modo corretto quando il timer è scaduto. Grazie Signore. – asawyer

+0

Sì, di solito è :) Nessun problema, felice di poterti aiutare. –

+0

Devi usare "@" anche se stai usando l'helper subito dopo un "@if". Ad esempio: '@if (Model.Any()) {@ Html.EditorFor (...); } ' – Mike

Problemi correlati