javascript - 如何在 asp.net-mvc 和 javascript 中转义撇号

标签 javascript asp.net-mvc arrays

我的 Controller 中有以下代码:

    public ActionResult MyPage()
    {
      var vm = new MyViewModel();
      vm.StringList = "'" + String.Join("','", MyModel.GetList().Select(r => r.Name).ToArray()) + "'";

        return View(vm);
    }

在我的 asp.net-mvc View 中,我有以下代码:

 var myJavascriptArray = [<%=Model.StringList %>];

在 JavaScript 函数内

这工作正常,直到以下名称之一:

 MyModel.GetList()

call 中有一个撇号,例如“Bill O'Brien”

因为这搞乱了我的 javascript 代码,因为它认为 O 后面的 ' 是该条目的结尾和换行符。

转义这个字符的最佳方法是什么,这样我就可以在 javascript 中拥有一个像这样的数组,最终将显示为:

var myJavascriptArray = [''项目 1',项目 2','项目 3','项目 4'];

并将“Bill O'Brien”作为条目之一进行处理。

最佳答案

您是否正在尝试使用所有这些手动撇号之类的东西进行某种 JSON 序列化? 不要

只需定义一个包含名称列表的 View 模型:

public class MyViewModel
{
    public string[] Names { get; set; }
} 

您将填充 Controller 并传递给 View :

public ActionResult MyPage()
{
    var model = new MyViewModel
    {
        Names = MyModel.GetList().Select(r => r.Name).ToArray()
    }
    return View(model);
}

并在 View JSON 中序列化此属性:

var myJavascriptArray = <%= new JavaScriptSerializer().Serialize(Model.Names) %>;

或者如果您使用的是 ASP.NET MVC 3:

var myJavascriptArray = <%= Json.Encode(Model.Names) %>;

这将在 View 中生成正确的 JSON 编码字符串数组:

var myJavascriptArray = ["name 1", "name 2", "name 3"];

您可以将其作为普通的 js 数组进行操作:

alert(myJavascriptArray[1]);

显然,这种技术适用于比简单字符串数组更复杂的对象图。您可以安全地序列化整个对象模型,而不必担心单引号、双引号、括号等...当然,除了所有这些之外,javascript 序列化程序还将处理像 Bill O'Brien 这样的名称并正确编码他们。

关于javascript - 如何在 asp.net-mvc 和 javascript 中转义撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922667/

相关文章:

asp.net-mvc - MVVM 在 ASP.NET MVC 4 Web 应用程序中扮演什么角色?

javascript - 使用数组访问(深层)嵌套对象属性

c# - 将整数输入保存到数组中

javascript - 菜单 : how to auto select first subitem

javascript - 与页面中的多个图表交互

javascript - 使用 jQuery 'on' 函数将事件传递给 _.throttle 函数

c - C 中的动态 2 数组

javascript - 当屏幕太小时用图像替换视频

asp.net-mvc - 如何通过 SignalR Hub 向用户发送通知新消息

asp.net-mvc - 自定义HtmlHelper呈现文本而不是标记