[英]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 = 'yyyy-mm';
</script>
我试过了
"var {0} = '{1}'; " // writes 'yyyy-mm' to view
"var {0} = \"{1}\"; " // writes "yyyy-mm" 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.