【问题标题】:Escape @ character in razor view engine在剃刀视图引擎中转义@字符
【发布时间】:2011-04-07 06:38:03
【问题描述】:

我正在创建一个使用 Razor 作为视图引擎的示例 ASP.NET MVC 3 站点。 razor 语法以 @ 字符开头,例如@RenderBody()。如果我在我的 cshtml 页面上写 @test 它会给我解析错误

CS0103:当前上下文中不存在名称“test”

如何转义“@”字符?

【问题讨论】:

  • 在 C# 中,您可以使用 @ 标记关键字,以将它们视为变量名而不是关键字。据我所知,以这种方式在 Razor 中使用保留关键字似乎是不可能的。
  • @GrimaceofDespair 仍然将关键字标记为变量的方法是将第二个 @ 括在大括号中。我设法通过这种方式编写它:@(@new)

标签: asp.net-mvc-3 razor escaping


【解决方案1】:

@@ 应该这样做。

【讨论】:

  • 这在这种情况下似乎不起作用:@RazorCodePart1 @@ @RazorCodePart2 例如两个 Razor 代码 sn-ps 之间的文字 @。
  • 最好的解决方案是为@字符使用 HTML 编码的字符串:@
  • 我的剃须刀页面中有一个<style> 标签,它必须嵌入一个'@media {}' 指令,因此不能选择html 编码;只有@@ 有效。
  • @WoIIe 不在 URL 中。
  • 在href中使用@("@")
【解决方案2】:

Razor @escape char to symbols...

<img src="..." alt="Find me on twitter as @("@username")" />

<img src="..." alt="Find me on twitter as @("@")username" />

【讨论】:

  • 这种方法似乎是最好的,因为它也适用于@media css 东西,而 HTML 实体方式可能不会。
  • 不错!非常感谢:)
  • 你成功了,谢谢 :)
  • 运行良好。谢谢。
  • 太好了,我发现这段代码更容易让大家理解
【解决方案3】:

在我看来@Html.Raw("@") 似乎比@@ 更可靠,因为并非在所有情况下@@ 都会逃脱。

因此:

<meta name="twitter:site" content="@twitterSite">

应该是:

<meta name="twitter:site" content="@Html.Raw("@")twitterSite">

【讨论】:

  • 我如何在包含多个段落的大文本上使用它?我试过用 ` 而不是 " 但结果有问题。空白行没有错误,但 ` 字符有错误。
【解决方案4】:

使用&lt;text&gt;&lt;/text&gt;或更简单的方法@:

【讨论】:

  • 奇怪的是(at 符号冒号)@: 字符序列语法对我不起作用,因为我尝试将我的 ASP.NET MVC 3 项目升级到 MVC4。我得到的例外是:“”:“在代码块的开头无效。只有标识符、关键字、cmets、“(”和“{”是有效的。”
  • @Michael 这很奇怪。他们一定是在版本 4 中删除了它。
  • 嗨 Kasper Skov,我发现 @: 问题实际上与 @: 无关。它与在 @if() {} 块中不必要地使用 @Model 有关。解决方法是删除模型上的 at 符号。我需要避免在服务器范围内使用 @ 。 stackoverflow.com/questions/12809855/…
【解决方案5】:

我更喜欢使用@Html.Raw("@"),而不是 HTML 实体。

【讨论】:

    【解决方案6】:

    @@ 是上述 Razor 视图中 @ 的转义字符。

    但是,当“@”只是一个“@”以及它标记 C#(或 VB.Net)代码的位置时,Razor 确实会尝试解决。这样做的主要用途之一是在 Razor 视图中识别电子邮件地址 - 不必对电子邮件地址中的 @ 字符进行转义。

    【讨论】:

    • 我还没有找到 Razor/VB.net 和使用 Prismjs 的方法。我为 Edit一个>
    【解决方案7】:

    关于@RazorCodePart1 @@ @RazorCodePart2的问题,需要顺序:

    @RazorCodePart1 @:@@ @RazorCodePart2
    

    我知道,它看起来有点奇怪,但它确实有效,并且会在代码块之间为您提供文字字符“@”。

    【讨论】:

      【解决方案8】:

      我也遇到了同样的问题。我声明了一个变量,将我的文本与 @.

      @{
         var twitterSite = "@MyTwitterSite";
      }
      
      ...
      
      <meta name="twitter:site" content="@twitterSite">
      

      【讨论】:

      • 这是唯一一个对我有用并且对 Open Graph 调试器有效的。
      【解决方案9】:

      这对我有用

      <meta name="author" content="Alan van Buuren @("@Alan_van_Buuren")">
      

      或者你可以使用: @@Alan_van_Buuren

      :D

      【讨论】:

        【解决方案10】:

        我知道这个问题很老,但我尝试了以上所有方法,但它并没有帮助我在 URL 中转义 ASP.NET 框架(MVC 5)中的字符“@”。不过,根据 Terje Solem 的回答,UTF-8 代码 %40 对我有用。这是我试图访问的原始 URL:

        https://unpkg.com/@google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js

        这在我的代码中对我有用:

        https://unpkg.com/%40google/markerclustererplus@4.0.1/dist/markerclustererplus.min.js
        

        【讨论】:

          【解决方案11】:

          我尝试了上述所有选项,但没有一个有效。这就是我所做的工作:

          @{
              string str = @"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$";
          }
          
          <td>Email</td>
          <td>
             <input type="text" id="txtEmail" required name="email" pattern=@str /> 
          </td>
          

          我创建了一个字符串变量并将所有 RegEx 模式代码传递给它,然后在 html 中使用该变量,Razor 用它很酷。

          【讨论】:

            【解决方案12】:

            您可以为此使用@@。 赞var email = firstName + '\@@' + domain;

            【讨论】:

              【解决方案13】:

              只需在 CSHTML 文件中添加一个变量 var myVariable = @"@";

              并将其添加到您的布局中 &lt;span class="my-class"&gt;&lt;a href="@myVariale" target="_blank" &gt;link text&lt;/a&gt;&lt;/span&gt;

              【讨论】:

                【解决方案14】:

                我无法让这些在占位符属性中起作用,所以我使用了 xml 特殊字符。

                <input type="text" placeholder="fex: firstname&#64;lastname.com"/>
                

                在此处查看更多示例。 https://www.dvteclipse.com/documentation/svlinter/How_to_use_special_characters_in_XML.3F.html

                【讨论】:

                • 我需要在元标记中添加@。这很好用。 @@ 在那里不起作用。
                【解决方案15】:

                实际上@应该与 Razor 语法关键字或变量/模型一起使用以绑定值。

                例如: 如果 test 被赋值 即@ { var test = "ABC" } 然后您可以通过设置获取值,因为 @test 任何地方都是 html 部分中的 cshtml 页面。 否则,简单地用作@Html.DisplayName("test")

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-03-16
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-08-05
                  • 1970-01-01
                  相关资源
                  最近更新 更多