2013-07-30 89 views
7

我有一個模型與object屬性和值類型的id號,並希望根據值類型編號創建一個不同的編輯器控件。剃刀@幫助功能不呈現任何Html

我正在嘗試使用@help剃刀構造,但是沒有任何助手的內容被呈現給頁面。

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

當我穿上@switch一個破發點,我可以看到調試器移動到正確的幫手,但它立刻跳到函數的結尾,然後退出開關,沒有任何渲染。

任何想法我在做什麼錯在這裏?

回答

18

要使用Razor渲染文本,您必須使用@符號。如果您將代碼更改爲

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

它應該工作。

替代你可以使用Response.Write這樣的:

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

這基本上是@在做什麼剃鬚刀。

+0

它總是這樣簡單,讓我把頭髮撕掉。定時器啓動後,我會盡快改正。謝謝你,先生。 – asawyer

+0

是的,它通常是:)沒問題,很高興我能幫上忙。 –

+0

即使您在「@if」之後立即使用助手,也必須使用「@」。例如:'@if(Model.Any()){@ Html.EditorFor(...); }' – Mike