如何在Razor视图中写引号("或")和引用字符串

SNa*_*Nag 5 c# razor asp.net-mvc-5

我有一些常量用于保存在RESX文件中的JS,例如:

DATE_PICKER_FORMAT   yyyy-mm-dd  
DATETIME_FORMAT      yyyy-mm-dd hh:mm:ss  
MONTH_PICKER_FORMAT  yyyy-mm  
Run Code Online (Sandbox Code Playgroud)

我写了一个简单的类来帮助在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我这样做:

@section Scripts
{
    <script>
        @JavascriptResourceRenderer.RenderPageConstants()
    </script>
}
Run Code Online (Sandbox Code Playgroud)

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

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

<script>
    var MONTH_PICKER_FORMAT = &#39;yyyy-mm&#39;;  
</script>
Run Code Online (Sandbox Code Playgroud)

我试过了

"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 
Run Code Online (Sandbox Code Playgroud)

我该怎么写

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

到了视野?

Bre*_*een 5

您的字符串正在进行 HTML 编码。

您需要输出原始文本。您的视图需要执行以下操作:

@section Scripts
{
    <script>
        @Html.Raw(JavascriptResourceRenderer.RenderPageConstants())
    </script>
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*idG 5

您应该将输出作为输入返回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);
}
Run Code Online (Sandbox Code Playgroud)

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

@Html.Raw(JavascriptResourceRenderer.RenderPageConstants())
Run Code Online (Sandbox Code Playgroud)