10

我有一个带有object属性和值类型 ID 编号的模型,并且想要根据值类型编号创建不同的编辑器控件。

我正在尝试使用@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我可以看到调试器移动到正确的助手,但它立即跳到函数的末尾然后退出开关,没有渲染任何内容。

知道我在这里做错了什么吗?

4

1 回答 1

21

要使用 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;
}

这基本上就是@剃须刀的作用。

于 2013-07-30T14:49:08.220 回答