首页 > 解决方案 > 用于生成字符串文字以传递给 javascript 函数的语法

问题描述

我无法将字符串“编码”为字符串文字,使用ASP.NET Core Razor Syntax.

当我调试生成的 Html 时,我收到一条错误消息,指出:

无效字符 '@'

我拥有的剃刀代码是这样的:

<script>
//...
control.option("value", @Html.Raw(@Model.Email.ToString()));
//...
</script>

生成的带有错误的 Html 行:

control.option("value", user@google.com);

我看到了错误,电子邮件地址没有编码为字符串文字,我认为也不是 html 安全的。

我怀疑理想的情况是:

control.option("value", "user@google.com");

标签: c#asp.net-corerazor

解决方案


您的代码中似乎有两个问题:

  1. 您引用了“价值”,但没有引用电子邮件地址。
  2. 您没有转义电子邮件地址,因此如果以某种方式包含该变量",即使您引用了结果字符串,您也会遇到问题。

System.Web要修复 2,您可以使用's转义字符串HttpUtility

string escapedStringValue = HttpUtility.JavaScriptStringEncode(stringValue);

现在让我们结合它来修复 1:

control.option("value", "@Html.Raw(System.Web.HttpUtility.JavaScriptStringEncode(@Model.Email.ToString()))");

注意,如果你经常使用它,你也可以将它变成一个扩展方法:

namespace Microsoft.AspNetCore.Mvc.Rendering
{
    public static class HelperExtensions
    {
        public static IHtmlContent JsString<TModel>(this IHtmlHelper<TModel> helper, string value)
        {
            return helper.Raw(System.Web.HttpUtility.JavaScriptStringEncode(value));
        }
    }
}

然后像这样使用它:

control.option("value", "@Html.JsString(@Model.Email.ToString())");

推荐阅读