繁体   English   中英

如何在Razor视图中写引号(“或')和带引号的字符串

[英]How to write quotes (" or ') and quoted strings to a Razor view

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

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 inspector查看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>

到视图?

您应该改为将输出作为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())

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM