在我的 Controller 方法中,我使用 TempData 将以下简单的逗号分隔字符串传递到我的 View :
var test = "hi,bye";
TempData["test"] = test;
在我看来,我有以下js方法:
var desks = @(TempData["test"]).split(",");
当我使用 Google Chrome 开发者控制台检查 DOM 时,我看到以下内容:
var desks = hi,bye.split(",");
为什么我传递的 TempData 字符串会丢失引号并变成某种其他对象?我做错了什么?
最佳答案
您传递的字符串不会“丢失”其引号;字符串value没有引号,尽管字符串literal有。
你必须自己执行 JavaScript 字符串转义,如下所示:
'@(TempData["test"].
Replace("\\", "\\\\").
Replace("\n", "\\n").
Replace("\r", "\\r").
Replace("'", "\\'"))'.split(",");
这将创建一个转义字符串,该字符串可能足够安全,可以作为 JavaScript 字符串文字输出。
另一种选择是调用 JSON 序列化来输出字符串,这将涵盖您的所有基础。
@Html.Raw((new JavaScriptSerializer()).Serialize(TempData["test"])) .split(",");
JavaScriptSerializer.Serialize
将获取任何对象(在本例中为字符串)并以 JavaScript 可以理解的方式输出。
Html.Raw
将确保 Serialize
的输出不经过 HTML 编码写入输出流。
C# 代码的最后一个 )
和 JavaScript .split
之间的额外空格是必要的。如果没有它,split
会被 Razor 解释为 C# 方法的名称,但事实并非如此。
要使用 JavaScriptSerializer
类,只需在 View 顶部添加 @using System.Web.Script.Serialization
指令即可。
关于javascript - ASP.NET MVC - 在客户端 JS 中访问 C# 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35869308/