.NET 3.5'deki MS ScriptManager'ın RegisterStartUpScript
yöntemini kullanarak istemciye bir SQL Server istisnası çıktısını vermeye çalışıyorum. Bu bazı hatalar için iyi çalışır, ancak istisna tek tırnak içerdiğinde uyarı başarısız olur.Bir .NET dizesini MS Ajax'da kullanılmak üzere JavaScript dizgisine kodlamak için standart bir yol var mı?
Sadece tek tırnaklardan kurtulmak istemiyorum. JavaScript'te kullanmak için özel karakterlerden kaçmak için arayabileceğim standart bir işlev var mı?
string scriptstring = "alert('" + ex.Message + "');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "Alert", scriptstring , true);
DÜZENLEME:
Teşekkür @tpeczek, kod neredeyse benim için çalıştı :) ama hafif bir değişiklik (tek tırnak kaçış) ile bir tedavi çalışır. Aşağıda belirtildiği gibi Benim burada değiştirilmiş versiyonu yer verdik
...
public class JSEncode
{
/// <summary>
/// Encodes a string to be represented as a string literal. The format
/// is essentially a JSON string.
///
/// The string returned includes outer quotes
/// Example Output: "Hello \"Rick\"!\r\nRock on"
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static string EncodeJsString(string s)
{
StringBuilder sb = new StringBuilder();
sb.Append("\"");
foreach (char c in s)
{
switch (c)
{
case '\'':
sb.Append("\\\'");
break;
case '\"':
sb.Append("\\\"");
break;
case '\\':
sb.Append("\\\\");
break;
case '\b':
sb.Append("\\b");
break;
case '\f':
sb.Append("\\f");
break;
case '\n':
sb.Append("\\n");
break;
case '\r':
sb.Append("\\r");
break;
case '\t':
sb.Append("\\t");
break;
default:
int i = (int)c;
if (i < 32 || i > 127)
{
sb.AppendFormat("\\u{0:X04}", i);
}
else
{
sb.Append(c);
}
break;
}
}
sb.Append("\"");
return sb.ToString();
}
}
- orijinal kaynak: here
Great write-up. "JavaScriptSerializer" ın .NET 2'de ASP.NET AJAX 1.0 bant dışı sürümü aracılığıyla da bulunduğunu unutmayın (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ca9d90fa-e8c9- 42e3-aa19-08e2c027f5d6 & displaylang = tr). – bdukes
Bu durumda, 'HttpUtility.HtmlAttributeEncode (HttpUtility.JavaScriptStringEncode (unencodedString)) 'veya' HttpUtility.HtmlEncode (HttpUtility.JavaScriptStringEncode (unencodedString)) 'ifadesini kullanmazsınız. –
@MartinBrown: JS-in-HTML-özniteliğine enjekte etmek için bunlardan birini kullanabilirsiniz (evet, bunu yapmak genelde kötü bir fikir olsa da). HtmlEncode ve HtmlAttributeEncode yöntemleri merakla adlandırılır; nitelik değerleri için daha iyi çalışmalı ve bir tanesi metin içeriği için daha iyi çalışmalı gibi görünüyor, ancak kaynaklarda referans olarak değerlendirmede böyle bir ayrım yoktur. Bunlar sadece iki farklı şekilde uygulanan HTML kodlayıcıdır. – bobince