2013-07-30 4 views
7

Ich habe ein Modell mit einer object-Eigenschaft und eine Werttyp-ID-Nummer, und möchten ein anderes Editor-Steuerelement abhängig von der Werttypnummer erstellen.Razor @helper Funktionen rendern keine HTML

Ich versuche @help Rasierer Contructs zu verwenden, aber keiner der Inhalte der Helfer wird auf der Seite gerendert.

@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; 
} 

Wenn ich auf dem @switch einen Haltepunkt habe ich den Debugger Umzug in die richtigen Helfer sehen kann, aber es springt sofort zum Ende der Funktion dann den Schalter verlässt, wird nichts gemacht.

Irgendeine Idee, was ich hier falsch mache?

Antwort

18

Um Text mit Razor zu rendern, müssen Sie das @ -Zeichen verwenden. Wenn Sie Ihren Code zu

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

ändern, sollte es funktionieren.

Alternative Sie Response.Write wie diese verwenden:

@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; 
} 

, die im Grunde ist das, was die @ tut gestochen.

+0

Es ist immer etwas Einfaches wie das, das mich meine Haare reißen lässt. Ich werde bald korrigieren, wenn der Timer abgelaufen ist. Danke mein Herr. – asawyer

+0

Ja, ist es normalerweise :) Keine Probleme, froh, dass ich helfen konnte. –

+0

Sie müssen "@" verwenden, auch wenn Sie den Helfer unmittelbar nach einem "@if" verwenden. Zum Beispiel: '@if (Model.Any()) {@ Html.EditorFor (...); } ' – Mike