簡體   English   中英

如何在asp.net-mvc和javascript中轉義撇號

[英]how to escape an apostrophe in asp.net-mvc and javascript

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

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

        return View(vm);
    }

在我的asp.net-mvc視圖中,我有以下代碼:

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

在javascript函數內

這可以正常工作,直到以下名稱之一:

 MyModel.GetList()

呼叫中帶有撇號,例如“ Bill O'Brien”

因為這會弄亂我的javascript代碼,因為它認為O后面的'是該條目的結尾,並且該行中斷了。

逃脫此字符的最佳方法是什么,這樣我就可以在javascript中擁有這樣的數組,最終將顯示為:

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

並處理“ Bill O'Brien”作為參賽作品之一。

您是否正在嘗試使用所有這些手動撇號和其他東西進行某種JSON序列化? 別這樣

只需定義一個將包含名稱列表的視圖模型:

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

您將在您的控制器中填充並傳遞到視圖:

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

並在視圖JSON中序列化此屬性:

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

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

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

這將在視圖中產生正確的JSON編碼的字符串數組:

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

您可以將其作為普通的js數組進行操作:

alert(myJavascriptArray[1]);

顯然,此技術適用於比簡單字符串數組更復雜的對象圖。 您可以安全地序列化整個對象模型,而不必擔心單引號,雙引號,括號等。當然,除了所有這些之外,javascript序列化器還將處理諸如Bill O'Brien類的名稱並對其進行正確編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM