2013-07-30 6 views
7

Mam model z właściwością object i numerem identyfikacyjnym typu wartości i chcę utworzyć inny formant edytora w zależności od typu wartości.Funkcja Razor @helper nie renderuje żadnego html

Próbuję użyć konturu brzytwy @help, jednak żadna z zawartości pomocników nie jest wyświetlana na stronie.

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

Kiedy mogę umieścić punkt przerwania na @switch widzę przejście debugera do poprawnej pomocnika, ale przeskakuje od razu do końca funkcji następnie zamyka przełącznik, nic nie jest renderowany.

Masz pojęcie o tym, co robię źle?

Odpowiedz

18

Do renderowania tekstu za pomocą żyletki należy użyć znaku @. Jeśli zmienisz kod na

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

powinien działać.

Alternatywnie można użyć Response.Write takiego:

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

który jest w zasadzie to, co robi w @ brzytwa.

+0

To zawsze coś prostego, co sprawia, że ​​wyrywam włosy. Zaraz poprawię, gdy zegar się skończy. Dziękuję Panu. – asawyer

+0

Tak, zwykle jest :) Nie ma problemów, cieszę się, że mogłem pomóc. –

+0

Musisz użyć znaku "@", nawet jeśli używasz pomocnika natychmiast po znaku "@if". Na przykład: '@if (Model.Any()) {@ Html.EditorFor (...); } ' – Mike