javascript - ASP.NET MVC - 在客户端 JS 中访问 C# 字符串

标签 javascript c# jquery asp.net-mvc

在我的 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/

相关文章:

php - 使用 jQuery 将背景图像 css 设置为 wordpress 中的特色图像

javascript - 将鼠标悬停在另一个元素上时显示一个元素并进行调整

javascript - John Resigs 微型模板引擎,如何处理选择的问题?

javascript - jQuery width() 未在具有生成内容的 div 上返回正确的值

c# - 无法解析基类服务

c# - 修剪数组中的所有字符串

c# - 在 C# 中使用 System.ComponentModel.BackgroundWorker 和 lambda 的最佳方式

php - AJAX 返回 NaN

javascript - 为什么我会在我的 React 组件中收到意外标记?

JavaScript 循环依赖