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