使用Razor助手动态生成meta标签时出现ASCII字符问题求助
解决Razor助手输出meta标签时显示ASCII转义字符的问题
我猜你碰到的问题是Razor自动给输出的字符串做了HTML编码,再加上你手动写了<这类转义字符,结果页面源码里全是转义后的ASCII字符,根本看不到预期的<meta>标签。咱们一步步来解决这个问题:
问题根源
你现在的代码里手动拼接了带<的字符串,而Razor默认会对所有输出的字符串进行HTML编码——相当于把已经转义的字符又转义了一次,自然就出问题了。另外看你的代码,robotValue固定写死成了"noindex",没用到从CurrentModel获取的metaRobots值,这应该也是个小疏漏吧?
两种可行的解决方案
方案1:用Html.Raw()输出未编码内容
如果你还是想保留字符串拼接的方式,得告诉Razor别对这段内容编码,用Html.Raw()把拼接好的标签包起来就行:
@helper WriteMetaRobots(DynamicNode siteRoot) { // 优先用模型里的metaRobots值,为空就用默认的noindex var robotValue = CurrentModel.GetPropertyValue("metaRobots") ?? "noindex"; var robotsTag = !string.IsNullOrEmpty(robotValue) ? "<meta name='robots' content='" + robotValue + "' />" : ""; // 用Html.Raw避免编码 @Html.Raw(robotsTag) }
方案2:直接用Razor语法渲染标签(更推荐)
完全不用字符串拼接,直接用Razor的条件语法来生成标签,这样更清晰,也不会踩编码的坑:
@helper WriteMetaRobots(DynamicNode siteRoot) { var robotValue = CurrentModel.GetPropertyValue("metaRobots"); if (!string.IsNullOrEmpty(robotValue)) { <meta name='robots' content='@robotValue' /> } else { // 没有值的时候输出默认的noindex标签 <meta name='robots' content='noindex' /> } }
这种方式下Razor会正确识别<meta>标签,直接输出到页面源码里,不会做多余的编码。
小提示
- 记得测试一下
CurrentModel.GetPropertyValue("metaRobots")是不是真的能拿到你设置的值,如果这个字段本身是空的,就会输出默认的noindex标签。 - 要是你希望没值的时候不输出任何标签,把else块删掉就行。
内容的提问来源于stack exchange,提问作者Bob the Builder
相关产品推荐
相关产品推荐

