【问题标题】:Razor Syntax not rendering Multi-Statement code nuggetRazor 语法不呈现多语句代码块
【发布时间】:2012-08-09 12:05:56
【问题描述】:

大家好,我对 Razor 语法有一个奇怪的问题。

我用 Razor 语法编写了相同的代码块,只有内联表达式和多语句块不同。

About.cshtml

   <!-- Single statement blocks -->
   <p>
       Put content here.
       @Html.SubmitButton("You are in About")
   </p>

渲染输出:

Index.cshtml

<!-- Inline expressions BUT DOESNT WORKS-->
@{ Html.SubmitButton("okay in Index");}

<!-- Multi-statement block BUT DOESNT WORKS-->

@{ 
   Html.SubmitButton("You are in Index");
   Html.CheckBox("A Check Box");
 }

渲染输出:

PS:忽略快照中的输入按钮文本。

【问题讨论】:

    标签: asp.net asp.net-mvc visual-studio-2010 razor html-helper


    【解决方案1】:

    htmlhelpers 只返回个值。

    即使在代码块中,您仍然需要@ 来告诉 Razor 如何处理这些值(将它们打印到 HTML 缓冲区)。

    所以在这种情况下不要介意代码块,这将是多余的,因为除了 html-helpers 之外没有其他代码。

    但即使有其他代码要放置在块中,您仍然需要在助手前面加上@

    @{
        var myVar = "something";
        // and so on ...
    
        @Html.SubmitButton("You are in Index");
        @Html.CheckBox("A Check Box");
     }
    

    【讨论】:

    • 这很奇怪,varHtml.Submit("") 都是有效的 C# 语句,那为什么要区别对待呢?
    • 他们并没有真正受到区别对待。如果没有@,Html.CheckBox is 会做它应该做的事情——返回一个字符串,然后你可以根据需要捕获和操作它。 @Html.CheckBox(...) 只是 Response.Write(Html.CheckBox(...)) 的简写
    • 所以简单地说任何我想渲染为 html 的东西,我可以用 @ 符号附加它?
    • 任何可以采用.ToString() 的 c# 值都应该以这种方式工作,我相信。所以在我的代码中,你可以这样输出@myVar。 Razor 识别 HTML 标记,并会自动输出它们,而无需 @ 或 Response.Write,但纯文本(没有任何周围的标记标记)需要 @ 才能让 Razor 理解它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多