【问题标题】:How to write quotes (" or ') and quoted strings to a Razor view如何将引号(“或')和带引号的字符串写入 Razor 视图
【发布时间】:2015-07-23 10:42:11
【问题描述】:

我有一堆要在JS中使用的常量保存在一个RESX文件中,比如:

DATE_PICKER_FORMAT   yyyy-mm-dd  
DATETIME_FORMAT      yyyy-mm-dd hh:mm:ss  
MONTH_PICKER_FORMAT  yyyy-mm  

我编写了一个简单的类来帮助将其写入 Razor 视图上的 JS:

public static class JavascriptResourceRenderer
{
    private static string Render(ResourceSet resources)
    {
        string resourceString = "";

        foreach (DictionaryEntry resource in resources)
        {
            resourceString += String.Format("var {0} = '{1}'; ", resource.Key, resource.Value);
        }

        return resourceString;
    }

    public static string RenderPageConstants()
    {
        ResourceSet resources = PageConstants.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
        return Render(resources);
    }
}

在我看来,我正在这样做:

@section Scripts
{
    <script>
        @JavascriptResourceRenderer.RenderPageConstants()
    </script>
}

当视图加载时,常量会被渲染,除了引号被编码。

使用 DOM 检查器查看 HTML,这是我看到的:

<script>
    var MONTH_PICKER_FORMAT = &#39;yyyy-mm&#39;;  
</script>

我试过了

"var {0} = '{1}'; "   // writes &#39;yyyy-mm&#39; to view
"var {0} = \"{1}\"; " // writes &quot;yyyy-mm&quot; to view
@"var {0} = "{1}"; "  // syntax error in String.Format 

我该怎么写

<script>
    var MONTH_PICKER_FORMAT = "yyyy-mm"; // or 'yyyy-mm' (I want the quotes!)
</script>

看风景?

【问题讨论】:

    标签: c# razor asp.net-mvc-5


    【解决方案1】:

    您应该将输出返回为 MvcHtmlString,否则 MVC 将对其进行编码:

    private static MvcHtmlString Render(ResourceSet resources)
    {
        string resourceString = "";
    
        foreach (DictionaryEntry resource in resources)
        {
            resourceString += String.Format("var {0} = '{1}'; ", resource.Key, resource.Value);
        }
    
        return new MvcHtmlString(resourceString);
    }
    

    或者,您可以在视图中使用 Html Helper 方法 Html.Raw,但是您需要记住每次调用该方法时都这样做(这就是我不建议这样做的原因)这样):

    @Html.Raw(JavascriptResourceRenderer.RenderPageConstants())
    

    【讨论】:

      【解决方案2】:

      您的字符串正在被 HTML 编码。

      您需要输出原始文本。您的视图需要这样做:

      @section Scripts
      {
          <script>
              @Html.Raw(JavascriptResourceRenderer.RenderPageConstants())
          </script>
      }
      

      【讨论】:

      • 谢谢! DavidG 有更完整的答案,但很高兴了解 Html.Raw!
      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2018-03-20
      相关资源
      最近更新 更多