2013-07-30 88 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