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

leo*_*ora 0 javascript arrays asp.net-mvc

我的控制器中有以下代码:

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

        return View(vm);
    }
Run Code Online (Sandbox Code Playgroud)

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

 var myJavascriptArray = [<%=Model.StringList %>];
Run Code Online (Sandbox Code Playgroud)

在javascript函数里面

这工作正常,直到其中一个名称:

 MyModel.GetList()
Run Code Online (Sandbox Code Playgroud)

电话中有一个撇号,如 "比尔奥布莱恩"

因为它混淆了我的javascript代码,因为它认为'在O之后是该条目的结尾和换行符.

什么是逃离这个角色的最好方法,所以我可以在javascript中有一个数组,最终将显示为:

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

处理'Bill O'Brien'是其中一个条目.

Dar*_*rov 6

您是否尝试使用所有这些手动撇号和内容进行某种JSON序列化?不要.

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

public class MyViewModel
{
    public string[] Names { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)

您将在控制器中填充并传递到视图:

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

并在视图中JSON序列化此属性:

var myJavascriptArray = <%= new JavaScriptSerializer().Serialize(Model.Names) %>;
Run Code Online (Sandbox Code Playgroud)

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

var myJavascriptArray = <%= Json.Encode(Model.Names) %>;
Run Code Online (Sandbox Code Playgroud)

这将导致视图中正确的JSON编码的字符串数组:

var myJavascriptArray = ["name 1", "name 2", "name 3"];
Run Code Online (Sandbox Code Playgroud)

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

alert(myJavascriptArray[1]);
Run Code Online (Sandbox Code Playgroud)

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