मैं .NET 3.5 में MS ScriptManager की RegisterStartUpScript
विधि का उपयोग कर क्लाइंट को SQL सर्वर अपवाद के आउटपुट को पास करने का प्रयास कर रहा हूं। यह कुछ त्रुटियों के लिए ठीक काम करता है लेकिन जब अपवाद में सिंगल कोट्स होते हैं तो अलर्ट विफल हो जाता है।क्या एमएस अजाक्स में उपयोग के लिए जावास्क्रिप्ट स्ट्रिंग में .NET स्ट्रिंग को एन्कोड करने का कोई मानक तरीका है?
मैं केवल एकल उद्धरण से बचना नहीं चाहता हूं। जावास्क्रिप्ट में उपयोग के लिए किसी भी विशेष वर्ण से बचने के लिए मैं एक मानक फ़ंक्शन कह सकता हूं?
string scriptstring = "alert('" + ex.Message + "');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "Alert", scriptstring , true);
संपादित:
धन्यवाद @tpeczek, कोड लगभग मेरे लिए काम किया :) लेकिन एक मामूली संशोधन (एकल उद्धरण की एस्केपिंग) के साथ यह एक का इलाज काम करता है।
मैं अपने संशोधित संस्करण यहाँ शामिल किया है ...
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();
}
}
नीचे उल्लेख किया है - मूल स्रोत: here
ग्रेट राइट-अप। ध्यान दें कि 'JavaScriptSerializer' एएसपी.NET AJAX 1.0 आउट-ऑफ-बैंड रिलीज के माध्यम से .NET 2 में भी उपलब्ध है (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ca9d90fa-e8c9- 42e3-aa19-08e2c027f5d6 और displaylang = hi)। – bdukes
उस स्थिति में आप संदर्भ के आधार पर 'HttpUtility.HtmlAttributeEncode (HttpUtility.JavaScriptStringEncode (unencodedString)) या 'HttpUtility.HtmlEncode (HttpUtility.JavaScriptStringEncode (unencodedString)) का उपयोग नहीं करेंगे? –
@ मार्टिनब्राउन: आप इनमें से किसी एक का उपयोग जेएस-इन-एचटीएमएल-एट्रिब्यूट में इंजेक्ट करने के लिए कर सकते हैं, हां (हालांकि यह आमतौर पर ऐसा करने का बुरा विचार है)। 'HtmlEncode' और 'HtmlAttributeEncode' विधियों को उत्सुकता से नामित किया गया है; ऐसा लगता है कि किसी को विशेषता मानों के लिए बेहतर काम करना चाहिए और किसी को टेक्स्ट सामग्री के लिए बेहतर काम करना चाहिए, लेकिन संदर्भ संसाधन द्वारा निर्णय लेने में ऐसा कोई भेद नहीं है। वे केवल दो मनमाने ढंग से-अलग-अलग एचटीएमएल एन्कोडर्स हैं। – bobince