【问题标题】:Razor @helper functions not rendering any HtmlRazor @helper 函数不呈现任何 Html
【发布时间】:2013-07-30 14:44:26
【问题描述】:

我有一个带有 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 上设置断点时,我可以看到调试器移动到正确的帮助程序,但它立即跳到函数的末尾,然后退出开关,没有渲染任何内容。

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

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

    这基本上是 @ 在剃须刀中所做的。

    【讨论】:

    • 总是像这样简单的事情让我把头发扯掉。计时器到时我会尽快纠正。谢谢先生。
    • 是的,通常是 :) 没问题,很高兴我能提供帮助。
    • 即使在“@if”之后立即使用帮助程序,也必须使用“@”。例如:@if(Model.Any()) { @Html.EditorFor(...); }
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2013-07-06
    • 1970-01-01
    • 2011-08-09
    • 2013-06-10
    • 1970-01-01
    • 2015-06-05
    • 2011-12-07
    相关资源
    最近更新 更多