JavaScriptUtil.cs
上传用户:szgaoree
上传日期:2009-01-05
资源大小:74k
文件大小:4k
源码类别:

Ajax

开发平台:

C#

  1. /*
  2.  * MS 06-04-04 fixed GetEnumRepresentation if type.FullName has no "."
  3.  * MS 06-04-12 fixed  return value for QuoteString, will be simply removed from the string
  4.  * 
  5.  * 
  6.  */
  7. using System;
  8. using System.Xml;
  9. using System.Text;
  10. namespace AjaxPro
  11. {
  12. /// <summary>
  13. /// Provides helper methods for JavaScript.
  14. /// </summary>
  15. public sealed class JavaScriptUtil
  16. {
  17. /// <summary>
  18. /// Quote the fiven string to be used in JSON.
  19. /// </summary>
  20. /// <param name="s">The string to quote.</param>
  21. /// <returns>Returns the quoted string.</returns>
  22. public static string QuoteString(string s)
  23. {
  24. if(s != null)
  25. return s.Replace("", "").Replace("\", "\\").Replace("t", "\t").Replace("r", "\r").Replace("n", "\n").Replace(""", "\"");
  26. return s;
  27. }
  28. /// <summary>
  29. /// Converts a enum type to a JavaScript representation.
  30. /// </summary>
  31. /// <param name="type">The type of the enum.</param>
  32. /// <returns>Returns a JavaScript that will add a local variable to the page.</returns>
  33. public static string GetEnumRepresentation(Type type)
  34. {
  35. if(type.IsEnum == false)
  36. return "";
  37. StringBuilder sb = new StringBuilder();
  38. AjaxNamespaceAttribute[] ema = (AjaxNamespaceAttribute[])type.GetCustomAttributes(typeof(AjaxNamespaceAttribute), true);
  39. if(ema.Length > 0 && ema[0].ClientNamespace.Replace(".", "").Length > 0)
  40. {
  41. sb.Append("addNamespace("" + ema[0].ClientNamespace + "");rn");
  42. sb.Append(ema[0].ClientNamespace + ".");
  43. sb.Append(type.Name);
  44. }
  45. else
  46. {
  47. sb.Append("addNamespace("" + (type.FullName.IndexOf(".") > 0 ? type.FullName.Substring(0, type.FullName.LastIndexOf(".")) : type.FullName) + "");rn");
  48. sb.Append(type.FullName);
  49. }
  50. sb.Append(" = {rn");
  51. string[] names = Enum.GetNames(type);
  52. int c=0;
  53. foreach(int i in Enum.GetValues(type))
  54. {
  55. sb.Append("t"");
  56. sb.Append(names[c]);
  57. sb.Append("":");
  58. sb.Append(i);
  59. if(c < names.Length -1)
  60. sb.Append(",rn");
  61. c++;
  62. }
  63. sb.Append("rn}rn");
  64. return sb.ToString();
  65. }
  66. /// <summary>
  67. /// Converts an IJavaScriptObject to an XML document.
  68. /// </summary>
  69. /// <param name="o">The IJavaScript object to convert.</param>
  70. /// <returns>Returns an XML document.</returns>
  71. public static XmlDocument ConvertIJavaScriptObjectToXml(IJavaScriptObject o)
  72. {
  73. XmlDocument doc = new XmlDocument();
  74. doc.LoadXml("<root/>");
  75. AddIJavaScriptObject(doc.DocumentElement, o);
  76. return doc;
  77. }
  78. internal static void AddIJavaScriptObject(XmlElement n, IJavaScriptObject o)
  79. {
  80. if(o is JavaScriptArray)
  81. {
  82. XmlElement p = n.OwnerDocument.CreateElement("array");
  83. foreach(IJavaScriptObject a in (JavaScriptArray)o)
  84. AddIJavaScriptObject(p, a);
  85. n.AppendChild(p);
  86. }
  87. else if(o is JavaScriptBoolean)
  88. {
  89. XmlElement p = n.OwnerDocument.CreateElement("boolean");
  90. p.InnerText = o.Value;
  91. n.AppendChild(p);
  92. }
  93. else if(o is JavaScriptNumber)
  94. {
  95. XmlElement p = n.OwnerDocument.CreateElement("number");
  96. p.InnerText = o.Value;
  97. n.AppendChild(p);
  98. }
  99. else if(o is JavaScriptString)
  100. {
  101. XmlElement p = n.OwnerDocument.CreateElement("string");
  102. p.InnerText = o.Value;
  103. n.AppendChild(p);
  104. }
  105. else if(o is JavaScriptObject)
  106. {
  107. XmlElement p = n.OwnerDocument.CreateElement("object");
  108. foreach(string key in ((JavaScriptObject)o).Keys)
  109. {
  110. XmlElement e = n.OwnerDocument.CreateElement("property");
  111. e.SetAttribute("name", key);
  112. p.AppendChild(e);
  113. AddIJavaScriptObject(e, (IJavaScriptObject)((JavaScriptObject)o)[key]);
  114. }
  115. n.AppendChild(p);
  116. }
  117. }
  118. }
  119. }