Razor @helper函数没有呈现任何Html

10

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

我尝试使用@help Razor构造,但是助手中的内容都没有呈现在页面上。

@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上设置断点时,我可以看到调试器移动到正确的帮助程序,但它会立即跳过函数结尾并退出switch,没有任何内容被渲染。你有什么想法我做错了什么吗?
1个回答

22

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

这基本上就是Razor中@所做的事情。


这总是一些简单的问题让我抓狂。计时器结束后,我会尽快修正。谢谢您先生。 - asawyer
是的,通常都是这样的 :) 没问题,很高兴能帮助到您。 - Mattias Jakobsson
即使在“@if”之后立即使用帮助程序,您也必须使用“@”。例如:@if(Model.Any()) { @Html.EditorFor(...); } - Miguel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接