2010-09-21 8 views
5

javascript içinde inline C# içinde çift alıntıdan kaçmalıyım. Kod aşağıdaki gibidir:javascript içinde satır içi C# komut dosyasında bir çift tırnaktan kaçma

if ("<%= TempData["Message"]%>" == "") { 
    // code 
}; 

Normalde ben sadece bu yüzden gibi tek tırnak kullanmak istiyorsunuz:

if ('<%= TempData["Message"]%>' == "") { 
    // code 
}; 

Ancak TempData["Message"] (o Html.ActionLink tarafından oluşturulan bir bağlantı içerdiğinde (içindeki tek tırnak vardır ASP.NET MVC'de yardımcı). Bu yüzden, tüm ActionLink yardımcılarını TempData["Message"]'un içinde değiştirebilirken, bu ilginç bir sorundur ve herhangi birinin bir cevabı olup olmadığını öğrenmek isteyip istemediğimi belirtmek isterim.

cevap

8

HttpUtility.JavaScriptStringEncode numaralı telefonu arayın.
Bu yöntem ASP.Net 4.0'da yenidir; önceki sürümler için WPL'u kullanın.

+0

Hmm, o ne yapar .NET 4. yok mu? – ajbeaven

+0

Bir sürü karakterden kaçar. WPL kullanın. – SLaks

+1

Ajax.JavaScriptStringEncode işe yarıyor gibi görünüyor. Herhangi bir yorum? – ajbeaven

0

JavaScript in bir biçime kabul edilebilir dizeleri kodlar bir HtmlHelper yazarak ele alıyoruz:

if ('<%= Html.JSEncode(TempData["Message"]) %>' == "") { 
    // code 
}; 
+0

Bu çok yanlış. '\ R''
'etiketleriyle değiştirilmemeli ve kaçmanız gereken daha çok karakter var. – SLaks

+0

Özellikle: ters eğik çizgi (aksi takdirde '\" '," \\ "' ye atılır ve dizgeyi güvenlik sonuçlarıyla bozar) ve diğer yeni satır karakterleri. – bobince

+0

Bu benim için ve kodlamak istediğim iletiler için geçerli olan şey. Kişisel ihtiyaçlarınızı ayarlamaktan çekinmeyin – Clicktricity

2

İçinde AjaxHelper.JavaScriptStringEncode yöntemini kullanabilirsiniz: görünümünde,

public static string JSEncode(this HtmlHelper htmlHelper, string source) 
{ 
    return (source ?? "").Replace(@"'", @"\'").Replace(@"""", @"\""").Replace(@"&", @"\&").Replace(((char)10).ToString(), "<br />"); 
} 

Sonra böyle bir Jilet görünümü,: bu çok ayrıntılı buysa

if ("@Ajax.JavaScriptStringEncode(TempData["Message"].ToString())" == "") { 
    // do stuff 
} 

, t oluşturmak Daha sonra herhangi bir görünümden çağırabilir /App_Code/JS.cshtml

@helper Encode(string value) { 
    @(HttpUtility.JavaScriptStringEncode(value)) 
} 

onun küçük yardımcısı:

@JS.Encode("'single these quotes are encoded'") 
İlgili konular