c# - 用于生成字符串文字以传递给 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");
解决方案
您的代码中似乎有两个问题:
- 您引用了“价值”,但没有引用电子邮件地址。
- 您没有转义电子邮件地址,因此如果以某种方式包含该变量
"
,即使您引用了结果字符串,您也会遇到问题。
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())");
推荐阅读
- java - 如何使数组的前半部分是从 0 到 7 的随机整数,后半部分是数组前半部分的随机成员,但只能选择一次
- swift - Swift 中的 createDirectory(at:withIntermediateDirectories:attributes:) 是原子的吗
- php - 内置函数的 ReflectionFunction 返回类型为 null
- node.js - 如何检测 webpack 在重新编译时使用了哪个编译选项
- html - setValue in formArray angular 8 并显示 ui
- vue.js - Vue + SWPrecacheWebpackPlugin - app.js 未缓存
- django-rest-framework - 一个用户登录和另一个用户的访问令牌
- javascript - 提交表单时的奇怪行为,它同时提交和删除
- git - 已放弃连接。致命:无法从远程存储库中读取
- python - scikit-learn 中 ColumnTransformer 的自定义转换器问题