Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery plugins 我们可以使用asp.net web服务按语法运行jquery拼写检查器吗?_Jquery Plugins_Spell Checking - Fatal编程技术网

Jquery plugins 我们可以使用asp.net web服务按语法运行jquery拼写检查器吗?

Jquery plugins 我们可以使用asp.net web服务按语法运行jquery拼写检查器吗?,jquery-plugins,spell-checking,Jquery Plugins,Spell Checking,我已经研究了很长一段时间,现在为textbox和多行textbox寻找合适的拼写检查器 我可以看到这个功能是为firefox内置的,但在chrome中并不存在 我正在检查所有的拼写检查演示,这是由 jQuerySpellChecker-badsyntax,我发现它非常好用 这里是链接 但我这里的问题是——拼写检查器使用php Web服务,我想在我的ASP.net Web应用程序中使用它 有什么办法可以让我使用asp.net web服务运行它吗 请为我提供一个解决方案。我是该插件的作者,非常希望

我已经研究了很长一段时间,现在为textbox和多行textbox寻找合适的拼写检查器

我可以看到这个功能是为firefox内置的,但在chrome中并不存在

我正在检查所有的拼写检查演示,这是由 jQuerySpellChecker-badsyntax,我发现它非常好用

这里是链接

但我这里的问题是——拼写检查器使用php Web服务,我想在我的ASP.net Web应用程序中使用它

有什么办法可以让我使用asp.net web服务运行它吗


请为我提供一个解决方案。

我是该插件的作者,非常希望合并其他一些webservice实现

这是最近在我的谷歌提醒中出现的,但我无法验证它是否有效:


大家好:维伦德拉·普拉布,巴德;我已经集成了Nhunspell和asp.net Web服务(.asmx),目前我正在尝试将jquery spellchecker-badsyntax集成到项目中,我是jquery spellchecker,现在可以连接到我的Web服务,但我仍然在处理我的Web服务返回的数据类型,以允许jquery spellcheker发挥它的魔力,但我认为这是有意义的

我的想法来自:

deepinthecode.com

以下是我使用的一些想法:

我用它来帮助在传递的文本中获取不正确的单词,并查看(OpenOffice下载为.oxt,但您必须通过zip来获得en_US.aff和en_US.dic)此文件需要位于bin目录

在Glabal.asax文件中,我创建了一个NHuspell的静态实例来完成所有工作

public class Global : System.Web.HttpApplication
{
    static SpellEngine spellEngine;
    static public SpellEngine SpellEngine { get { return spellEngine; } }

    protected void Application_Start(object sender, EventArgs e)
    {
        try
        {
            string dictionaryPath = Server.MapPath("Bin") + "\\";
            Hunspell.NativeDllPath = dictionaryPath;

            spellEngine = new SpellEngine();
            LanguageConfig enConfig = new LanguageConfig();
            enConfig.LanguageCode = "en";
            enConfig.HunspellAffFile = dictionaryPath + "en_us.aff";
            enConfig.HunspellDictFile = dictionaryPath + "en_us.dic";
            enConfig.HunspellKey = "";
            //enConfig.HyphenDictFile = dictionaryPath + "hyph_en_us.dic";
            spellEngine.AddLanguage(enConfig);
        }
        catch (Exception ex)
        {
            if (spellEngine != null)
                spellEngine.Dispose();
        }
    }

    ...

    protected void Application_End(object sender, EventArgs e)
    {
        if (spellEngine != null)
            spellEngine.Dispose();
        spellEngine = null;

    }
}
然后,我创建了一个ASMXWeb服务,用于获取错误单词和建议方法

 /// <summary>
/// Summary description for SpellCheckerService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]    
[ScriptService()]
public class SpellCheckerService : System.Web.Services.WebService
{      

    [WebMethod]
    //[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string get_incorrect_words(string words)
    {
        Dictionary<string, string> IncorrectWords = new Dictionary<string, string>();

        List<string> wrongWords = new List<string>();

        var palabras = words.Split(' ');

        // Check spelling of each word that has been passed to the method
        foreach (string word in palabras)
        {
            bool correct = Global.SpellEngine["en"].Spell(word);

            if (!correct){

                wrongWords.Add(word);
            }
        }

        IncorrectWords.Add("data", wrongWords[0]);

        return wrongWords[0];
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public List<string> get_suggestions(string word)
    {
        List<string> suggestions = new List<string>();
        suggestions = Global.SpellEngine["en"].Suggest(word);
        suggestions.Sort();
        return suggestions;
    }

我已经找到了解决问题的办法,并且 下面是为jquery拼写检查器返回JSON响应的Web服务

此代码是在中找到的代码的修改版本

github.com/jackmyang/jQuery-Spell-Checker-for-ASP.NET

     /// <summary>


  using System;
  using System.Collections.Generic;
  using System.Net;
  using System.Text;
  using System.Web;
  using System.Xml;

< %@ WebHandler Language="C#" Class="JQuerySpellCheckerHandler2" %>



/// <summary>
/// jQuery spell checker http handler class. Original server-side code was written by Richard Willis in PHP.
/// This is a version derived from the original design and implemented for ASP.NET platform.
/// 
/// It's very easy to use this handler with ASP.NET WebForm or MVC. Simply do the following steps:
///     1. Include project jquery.spellchecker assembly in the website as a reference
///     2. Include the httphandler node in the system.web node for local dev or IIS 6 or below
/// <example>
///     <![CDATA[
///         <system.web>
///             <httpHandlers>
///                 <add verb="GET,HEAD,POST" type="jquery.spellchecker.JQuerySpellCheckerHandler" path="JQuerySpellCheckerHandler.ashx"/>
///             </httpHandlers>
///         </system.web>
///     ]]>
/// </example>
///     3. If IIS7 is the target web server, also need to include the httphandler node in the system.webServer node
/// <example>
///     <![CDATA[
///         <system.webServer>
///             <handlers>
///                 <add verb="GET,HEAD,POST" name="JQuerySpellCheckerHandler" type="jquery.spellchecker.JQuerySpellCheckerHandler" path="JQuerySpellCheckerHandler.ashx"/>
///             </handlers>
///         </system.webServer>
///     ]]>
/// </example>
///     4. On the web page which included the spell checker, set the 'url' property to '~/JQuerySpellCheckerHandler.ashx'
/// <example>
///     <![CDATA[
///         $("#text-content")
///             .spellchecker({
///                 url: "~/JQuerySpellCheckerHandler.ashx",
///                 lang: "en",
///                 engine: "google",
///                 suggestBoxPosition: "above"
///         })
///     ]]>
/// </example>
/// </summary>
/// <remarks>
/// Manipulations of XmlNodeList is used for compatibility concern with lower version of .NET framework,
/// alternatively, they can be simplified using 'LINQ for XML' if .NET 3.5 or higher is available.
/// </remarks>
public class JQuerySpellCheckerHandler2 : IHttpHandler
{
    #region fields

    // in case google changes url, value of GoogleSpellCheckRpc can be stored in web.config instead to avoid code re-compilation
    private const string GoogleSpellCheckRpc = "https://www.google.com/tbproxy/spell?";
    private const string GoogleFlagTextAlreadClipped = "textalreadyclipped";
    private const string GoogleFlagIgnoreDups = "ignoredups";
    private const string GoogleFlagIgnoreDigits = "ignoredigits";
    private const string GoogleFlagIgnoreAllCaps = "ignoreallcaps";

    #endregion

    #region properties

    /// <summary>
    /// Gets or sets a value indicating whether [ignore duplicated words].
    /// </summary>
    /// <value><c>true</c> if [ignore dups]; otherwise, <c>false</c>.</value>
    private bool IgnoreDups { get; set; }

    /// <summary>
    /// Gets or sets a value indicating whether [ignore digits].
    /// </summary>
    /// <value><c>true</c> if [ignore digits]; otherwise, <c>false</c>.</value>
    private bool IgnoreDigits { get; set; }

    /// <summary>
    /// Gets or sets a value indicating whether [ignore all capitals].
    /// </summary>
    /// <value><c>true</c> if [ignore all caps]; otherwise, <c>false</c>.</value>
    private bool IgnoreAllCaps { get; set; }

    /// <summary>
    /// Gets or sets a value indicating whether [text alread clipped].
    /// </summary>
    /// <value><c>true</c> if [text alread clipped]; otherwise, <c>false</c>.</value>
    private bool TextAlreadClipped { get; set; }

    #endregion

    #region Implementation of IHttpHandler

    /// <summary>
    /// Enables processing of HTTP Web requests by a custom HttpHandler that implements the <see cref="T:System.Web.IHttpHandler"/> interface.
    /// </summary>
    /// <param name="context">An <see cref="T:System.Web.HttpContext"/> object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests. 
    /// </param>
    public void ProcessRequest(HttpContext context)
    {
        string engine = context.Request.Form[1];
        string lang = context.Request.Form["lang"];
        string text = context.Request.Form[3];
        string suggest = context.Request.Form[2];
        SetSwitches(context);            
        string result = SpellCheck(text, lang, engine, suggest);
        context.Response.ContentType = "application/js";
        string jsonStr = "{\"outcome\":\"success\",\"data\":[" + result + "]}";
        if (suggest == "get_incorrect_words")
        {
            context.Response.Write(jsonStr);
        }
        else
        {
            context.Response.Write(result);
        }
    }

    /// <summary>
    /// Gets a value indicating whether another request can use the <see cref="T:System.Web.IHttpHandler"/> instance.
    /// </summary>
    /// <returns>
    /// true if the <see cref="T:System.Web.IHttpHandler"/> instance is reusable; otherwise, false.
    /// </returns>
    public bool IsReusable
    {
        get { return false; }
    }

    #endregion

    #region private methods

    /// <summary>
    /// Spells the check.
    /// </summary>
    /// <param name="text">The text.</param>
    /// <param name="lang">The lang.</param>
    /// <param name="engine">The engine.</param>
    /// <param name="suggest">The suggest.</param>
    /// <returns></returns>
    private string SpellCheck(string text, string lang, string engine, string suggest)
    {
        if (0 == string.Compare(suggest, "undefined", StringComparison.OrdinalIgnoreCase))
        {
            suggest = string.Empty;
        }
        if (0 != string.Compare(engine, "google", true))
        {
            throw new NotImplementedException("Only google spell check engine is support at this moment.");
        }
        string xml;
        List<string> result;
        if (string.IsNullOrEmpty(suggest) || suggest == "get_incorrect_words")
        {
            xml = GetSpellCheckRequest(text, lang);
            result = GetListOfMisspelledWords(xml, text);
        }
        else
        {
            xml = GetSpellCheckRequest(text, lang);
            result = GetListOfSuggestWords(xml, text);
        }
        return ConvertStringListToJavascriptArrayString(result);
    }

    /// <summary>
    /// Sets the boolean switch.
    /// </summary>
    /// <param name="context">The context.</param>
    /// <param name="queryStringParameter">The query string parameter.</param>
    /// <returns></returns>
    private static bool SetBooleanSwitch(HttpContext context, string queryStringParameter)
    {
        byte tryParseZeroOne;
        string queryStringValue = context.Request.QueryString[queryStringParameter];
        if (!string.IsNullOrEmpty(queryStringValue) && byte.TryParse(queryStringValue, out tryParseZeroOne))
        {
            if (1 < tryParseZeroOne || 0 > tryParseZeroOne)
            {
                throw new InvalidOperationException(string.Format("Query string parameter '{0}' only supports values of 1 and 0.", queryStringParameter));
            }
            return tryParseZeroOne == 1;
        }
        return false;
    }

    /// <summary>
    /// Gets the list of suggest words.
    /// </summary>
    /// <param name="xml">The source XML.</param>
    /// <param name="suggest">The word to be suggested.</param>
    /// <returns></returns>
    private static List<string> GetListOfSuggestWords(string xml, string suggest)
    {
        if (string.IsNullOrEmpty(xml) || string.IsNullOrEmpty(suggest))
        {
            return null;
        }
        // 
        XmlDocument xdoc = new XmlDocument();
        xdoc.LoadXml(xml);
        if (!xdoc.HasChildNodes)
        {
            return null;
        }
        XmlNodeList nodeList = xdoc.SelectNodes("//c");
        if (null == nodeList || 0 >= nodeList.Count)
        {
            return null;
        }
        List<string> list = new List<string>();
        foreach (XmlNode node in nodeList)
        {
            list.AddRange(node.InnerText.Split('\t'));
            return list;
        }
        return list;
    }

    /// <summary>
    /// Gets the list of misspelled words.
    /// </summary>
    /// <param name="xml">The source XML.</param>
    /// <param name="text">The text.</param>
    /// <returns></returns>
    private static List<string> GetListOfMisspelledWords(string xml, string text)
    {
        if (string.IsNullOrEmpty(xml) || string.IsNullOrEmpty(text))
        {
            return null;
        }
        XmlDocument xdoc = new XmlDocument();
        xdoc.LoadXml(xml);
        if (!xdoc.HasChildNodes)
        {
            return null;
        }
        XmlNodeList nodeList = xdoc.SelectNodes("//c");
        if (null == nodeList || 0 >= nodeList.Count)
        {
            return null;
        }
        List<string> list = new List<string>();
        foreach (XmlNode node in nodeList)
        {
            int offset = Convert.ToInt32(node.Attributes["o"].Value);
            int length = Convert.ToInt32(node.Attributes["l"].Value);
            list.Add(text.Substring(offset, length));
        }
        return list;
    }

    /// <summary>
    /// Constructs the request URL.
    /// </summary>
    /// <param name="text">The text which may contain multiple words.</param>
    /// <param name="lang">The language.</param>
    /// <returns></returns>
    private static string ConstructRequestUrl(string text, string lang)
    {
        if (string.IsNullOrEmpty(text))
        {
            return string.Empty;
        }
        lang = string.IsNullOrEmpty(lang) ? "en" : lang;
        return string.Format("{0}lang={1}&text={2}", GoogleSpellCheckRpc, lang, text);
    }

    /// <summary>
    /// Converts the C# string list to Javascript array string.
    /// </summary>
    /// <param name="list">The list.</param>
    /// <returns></returns>
    private static string ConvertStringListToJavascriptArrayString(ICollection<string> list)
    {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.Append("[");
        if (null != list && 0 < list.Count)
        {
            bool showSeperator = false;
            foreach (string word in list)
            {
                if (showSeperator)
                {
                    stringBuilder.Append(",");
                }
                stringBuilder.AppendFormat("\"{0}\"", word);
                showSeperator = true;
            }
        }
        stringBuilder.Append("]");
        return stringBuilder.ToString();
    }

    /// <summary>
    /// Sets the switches.
    /// </summary>
    /// <param name="context">The context.</param>
    private void SetSwitches(HttpContext context)
    {
        IgnoreAllCaps = SetBooleanSwitch(context, GoogleFlagIgnoreAllCaps);
        IgnoreDigits = SetBooleanSwitch(context, GoogleFlagIgnoreDigits);
        IgnoreDups = SetBooleanSwitch(context, GoogleFlagIgnoreDups);
        TextAlreadClipped = SetBooleanSwitch(context, GoogleFlagTextAlreadClipped);
    }

    /// <summary>
    /// Requests the spell check and get the result back.
    /// </summary>
    /// <param name="text">The text.</param>
    /// <param name="lang">The language.</param>
    /// <returns></returns>
    private string GetSpellCheckRequest(string text, string lang)
    {
        string requestUrl = ConstructRequestUrl(text, lang);
        string requestContentXml = ConstructSpellRequestContentXml(text);
        byte[] buffer = Encoding.UTF8.GetBytes(requestContentXml);

        WebClient webClient = new WebClient();
        webClient.Headers.Add("Content-Type", "text/xml");
        try
        {
            byte[] response = webClient.UploadData(requestUrl, "POST", buffer);
            return Encoding.UTF8.GetString(response);
        }
        catch (ArgumentException)
        {
            return string.Empty;
        }
    }

    /// <summary>
    /// Constructs the spell request content XML.
    /// </summary>
    /// <param name="text">The text which may contain multiple words.</param>
    /// <returns></returns>
    private string ConstructSpellRequestContentXml(string text)
    {
        XmlDocument doc = new XmlDocument(); // Create the XML Declaration, and append it to XML document
        XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", null, null);
        doc.AppendChild(declaration);
        XmlElement root = doc.CreateElement("spellrequest");
        root.SetAttribute(GoogleFlagTextAlreadClipped, TextAlreadClipped ? "1" : "0");
        root.SetAttribute(GoogleFlagIgnoreDups, IgnoreDups ? "1" : "0");
        root.SetAttribute(GoogleFlagIgnoreDigits, IgnoreDigits ? "1" : "0");
        root.SetAttribute(GoogleFlagIgnoreAllCaps, IgnoreAllCaps ? "1" : "0");
        doc.AppendChild(root);
        XmlElement textElement = doc.CreateElement("text");
        textElement.InnerText = text;
        root.AppendChild(textElement);
        return doc.InnerXml;
    }

    #endregion
}

谢谢你的回复。我真的很感谢你为插件所做的一切工作。这个插件的效果非常好。如果我们以某种方式为ASP.NETWeb服务实现它,它将非常棒。我正在努力。如果我有突破,我肯定会分享代码。另外,请让我知道php web服务采用的参数是什么,以及我们从中得到的响应是什么。提前谢谢你好,维克多。。我将检查您提供的代码,看看它是如何工作的。。ThanksI已经发现jquery spellchecker希望从web服务返回以下格式的json:“{'Output':'success','data':[“incorrectoWord01,incorrectoWord02”]}”方法返回错误单词和数据作为[“suggest01,suggest02”]为检索分段的方法返回的建议词的格式Victor非常感谢。。我用firebug检查了同样的问题:)。。我已经修改了代码,以便使用jquery拼写检查器,它的语法是badbe。我将很快分享代码
     /// <summary>


  using System;
  using System.Collections.Generic;
  using System.Net;
  using System.Text;
  using System.Web;
  using System.Xml;

< %@ WebHandler Language="C#" Class="JQuerySpellCheckerHandler2" %>



/// <summary>
/// jQuery spell checker http handler class. Original server-side code was written by Richard Willis in PHP.
/// This is a version derived from the original design and implemented for ASP.NET platform.
/// 
/// It's very easy to use this handler with ASP.NET WebForm or MVC. Simply do the following steps:
///     1. Include project jquery.spellchecker assembly in the website as a reference
///     2. Include the httphandler node in the system.web node for local dev or IIS 6 or below
/// <example>
///     <![CDATA[
///         <system.web>
///             <httpHandlers>
///                 <add verb="GET,HEAD,POST" type="jquery.spellchecker.JQuerySpellCheckerHandler" path="JQuerySpellCheckerHandler.ashx"/>
///             </httpHandlers>
///         </system.web>
///     ]]>
/// </example>
///     3. If IIS7 is the target web server, also need to include the httphandler node in the system.webServer node
/// <example>
///     <![CDATA[
///         <system.webServer>
///             <handlers>
///                 <add verb="GET,HEAD,POST" name="JQuerySpellCheckerHandler" type="jquery.spellchecker.JQuerySpellCheckerHandler" path="JQuerySpellCheckerHandler.ashx"/>
///             </handlers>
///         </system.webServer>
///     ]]>
/// </example>
///     4. On the web page which included the spell checker, set the 'url' property to '~/JQuerySpellCheckerHandler.ashx'
/// <example>
///     <![CDATA[
///         $("#text-content")
///             .spellchecker({
///                 url: "~/JQuerySpellCheckerHandler.ashx",
///                 lang: "en",
///                 engine: "google",
///                 suggestBoxPosition: "above"
///         })
///     ]]>
/// </example>
/// </summary>
/// <remarks>
/// Manipulations of XmlNodeList is used for compatibility concern with lower version of .NET framework,
/// alternatively, they can be simplified using 'LINQ for XML' if .NET 3.5 or higher is available.
/// </remarks>
public class JQuerySpellCheckerHandler2 : IHttpHandler
{
    #region fields

    // in case google changes url, value of GoogleSpellCheckRpc can be stored in web.config instead to avoid code re-compilation
    private const string GoogleSpellCheckRpc = "https://www.google.com/tbproxy/spell?";
    private const string GoogleFlagTextAlreadClipped = "textalreadyclipped";
    private const string GoogleFlagIgnoreDups = "ignoredups";
    private const string GoogleFlagIgnoreDigits = "ignoredigits";
    private const string GoogleFlagIgnoreAllCaps = "ignoreallcaps";

    #endregion

    #region properties

    /// <summary>
    /// Gets or sets a value indicating whether [ignore duplicated words].
    /// </summary>
    /// <value><c>true</c> if [ignore dups]; otherwise, <c>false</c>.</value>
    private bool IgnoreDups { get; set; }

    /// <summary>
    /// Gets or sets a value indicating whether [ignore digits].
    /// </summary>
    /// <value><c>true</c> if [ignore digits]; otherwise, <c>false</c>.</value>
    private bool IgnoreDigits { get; set; }

    /// <summary>
    /// Gets or sets a value indicating whether [ignore all capitals].
    /// </summary>
    /// <value><c>true</c> if [ignore all caps]; otherwise, <c>false</c>.</value>
    private bool IgnoreAllCaps { get; set; }

    /// <summary>
    /// Gets or sets a value indicating whether [text alread clipped].
    /// </summary>
    /// <value><c>true</c> if [text alread clipped]; otherwise, <c>false</c>.</value>
    private bool TextAlreadClipped { get; set; }

    #endregion

    #region Implementation of IHttpHandler

    /// <summary>
    /// Enables processing of HTTP Web requests by a custom HttpHandler that implements the <see cref="T:System.Web.IHttpHandler"/> interface.
    /// </summary>
    /// <param name="context">An <see cref="T:System.Web.HttpContext"/> object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests. 
    /// </param>
    public void ProcessRequest(HttpContext context)
    {
        string engine = context.Request.Form[1];
        string lang = context.Request.Form["lang"];
        string text = context.Request.Form[3];
        string suggest = context.Request.Form[2];
        SetSwitches(context);            
        string result = SpellCheck(text, lang, engine, suggest);
        context.Response.ContentType = "application/js";
        string jsonStr = "{\"outcome\":\"success\",\"data\":[" + result + "]}";
        if (suggest == "get_incorrect_words")
        {
            context.Response.Write(jsonStr);
        }
        else
        {
            context.Response.Write(result);
        }
    }

    /// <summary>
    /// Gets a value indicating whether another request can use the <see cref="T:System.Web.IHttpHandler"/> instance.
    /// </summary>
    /// <returns>
    /// true if the <see cref="T:System.Web.IHttpHandler"/> instance is reusable; otherwise, false.
    /// </returns>
    public bool IsReusable
    {
        get { return false; }
    }

    #endregion

    #region private methods

    /// <summary>
    /// Spells the check.
    /// </summary>
    /// <param name="text">The text.</param>
    /// <param name="lang">The lang.</param>
    /// <param name="engine">The engine.</param>
    /// <param name="suggest">The suggest.</param>
    /// <returns></returns>
    private string SpellCheck(string text, string lang, string engine, string suggest)
    {
        if (0 == string.Compare(suggest, "undefined", StringComparison.OrdinalIgnoreCase))
        {
            suggest = string.Empty;
        }
        if (0 != string.Compare(engine, "google", true))
        {
            throw new NotImplementedException("Only google spell check engine is support at this moment.");
        }
        string xml;
        List<string> result;
        if (string.IsNullOrEmpty(suggest) || suggest == "get_incorrect_words")
        {
            xml = GetSpellCheckRequest(text, lang);
            result = GetListOfMisspelledWords(xml, text);
        }
        else
        {
            xml = GetSpellCheckRequest(text, lang);
            result = GetListOfSuggestWords(xml, text);
        }
        return ConvertStringListToJavascriptArrayString(result);
    }

    /// <summary>
    /// Sets the boolean switch.
    /// </summary>
    /// <param name="context">The context.</param>
    /// <param name="queryStringParameter">The query string parameter.</param>
    /// <returns></returns>
    private static bool SetBooleanSwitch(HttpContext context, string queryStringParameter)
    {
        byte tryParseZeroOne;
        string queryStringValue = context.Request.QueryString[queryStringParameter];
        if (!string.IsNullOrEmpty(queryStringValue) && byte.TryParse(queryStringValue, out tryParseZeroOne))
        {
            if (1 < tryParseZeroOne || 0 > tryParseZeroOne)
            {
                throw new InvalidOperationException(string.Format("Query string parameter '{0}' only supports values of 1 and 0.", queryStringParameter));
            }
            return tryParseZeroOne == 1;
        }
        return false;
    }

    /// <summary>
    /// Gets the list of suggest words.
    /// </summary>
    /// <param name="xml">The source XML.</param>
    /// <param name="suggest">The word to be suggested.</param>
    /// <returns></returns>
    private static List<string> GetListOfSuggestWords(string xml, string suggest)
    {
        if (string.IsNullOrEmpty(xml) || string.IsNullOrEmpty(suggest))
        {
            return null;
        }
        // 
        XmlDocument xdoc = new XmlDocument();
        xdoc.LoadXml(xml);
        if (!xdoc.HasChildNodes)
        {
            return null;
        }
        XmlNodeList nodeList = xdoc.SelectNodes("//c");
        if (null == nodeList || 0 >= nodeList.Count)
        {
            return null;
        }
        List<string> list = new List<string>();
        foreach (XmlNode node in nodeList)
        {
            list.AddRange(node.InnerText.Split('\t'));
            return list;
        }
        return list;
    }

    /// <summary>
    /// Gets the list of misspelled words.
    /// </summary>
    /// <param name="xml">The source XML.</param>
    /// <param name="text">The text.</param>
    /// <returns></returns>
    private static List<string> GetListOfMisspelledWords(string xml, string text)
    {
        if (string.IsNullOrEmpty(xml) || string.IsNullOrEmpty(text))
        {
            return null;
        }
        XmlDocument xdoc = new XmlDocument();
        xdoc.LoadXml(xml);
        if (!xdoc.HasChildNodes)
        {
            return null;
        }
        XmlNodeList nodeList = xdoc.SelectNodes("//c");
        if (null == nodeList || 0 >= nodeList.Count)
        {
            return null;
        }
        List<string> list = new List<string>();
        foreach (XmlNode node in nodeList)
        {
            int offset = Convert.ToInt32(node.Attributes["o"].Value);
            int length = Convert.ToInt32(node.Attributes["l"].Value);
            list.Add(text.Substring(offset, length));
        }
        return list;
    }

    /// <summary>
    /// Constructs the request URL.
    /// </summary>
    /// <param name="text">The text which may contain multiple words.</param>
    /// <param name="lang">The language.</param>
    /// <returns></returns>
    private static string ConstructRequestUrl(string text, string lang)
    {
        if (string.IsNullOrEmpty(text))
        {
            return string.Empty;
        }
        lang = string.IsNullOrEmpty(lang) ? "en" : lang;
        return string.Format("{0}lang={1}&text={2}", GoogleSpellCheckRpc, lang, text);
    }

    /// <summary>
    /// Converts the C# string list to Javascript array string.
    /// </summary>
    /// <param name="list">The list.</param>
    /// <returns></returns>
    private static string ConvertStringListToJavascriptArrayString(ICollection<string> list)
    {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.Append("[");
        if (null != list && 0 < list.Count)
        {
            bool showSeperator = false;
            foreach (string word in list)
            {
                if (showSeperator)
                {
                    stringBuilder.Append(",");
                }
                stringBuilder.AppendFormat("\"{0}\"", word);
                showSeperator = true;
            }
        }
        stringBuilder.Append("]");
        return stringBuilder.ToString();
    }

    /// <summary>
    /// Sets the switches.
    /// </summary>
    /// <param name="context">The context.</param>
    private void SetSwitches(HttpContext context)
    {
        IgnoreAllCaps = SetBooleanSwitch(context, GoogleFlagIgnoreAllCaps);
        IgnoreDigits = SetBooleanSwitch(context, GoogleFlagIgnoreDigits);
        IgnoreDups = SetBooleanSwitch(context, GoogleFlagIgnoreDups);
        TextAlreadClipped = SetBooleanSwitch(context, GoogleFlagTextAlreadClipped);
    }

    /// <summary>
    /// Requests the spell check and get the result back.
    /// </summary>
    /// <param name="text">The text.</param>
    /// <param name="lang">The language.</param>
    /// <returns></returns>
    private string GetSpellCheckRequest(string text, string lang)
    {
        string requestUrl = ConstructRequestUrl(text, lang);
        string requestContentXml = ConstructSpellRequestContentXml(text);
        byte[] buffer = Encoding.UTF8.GetBytes(requestContentXml);

        WebClient webClient = new WebClient();
        webClient.Headers.Add("Content-Type", "text/xml");
        try
        {
            byte[] response = webClient.UploadData(requestUrl, "POST", buffer);
            return Encoding.UTF8.GetString(response);
        }
        catch (ArgumentException)
        {
            return string.Empty;
        }
    }

    /// <summary>
    /// Constructs the spell request content XML.
    /// </summary>
    /// <param name="text">The text which may contain multiple words.</param>
    /// <returns></returns>
    private string ConstructSpellRequestContentXml(string text)
    {
        XmlDocument doc = new XmlDocument(); // Create the XML Declaration, and append it to XML document
        XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", null, null);
        doc.AppendChild(declaration);
        XmlElement root = doc.CreateElement("spellrequest");
        root.SetAttribute(GoogleFlagTextAlreadClipped, TextAlreadClipped ? "1" : "0");
        root.SetAttribute(GoogleFlagIgnoreDups, IgnoreDups ? "1" : "0");
        root.SetAttribute(GoogleFlagIgnoreDigits, IgnoreDigits ? "1" : "0");
        root.SetAttribute(GoogleFlagIgnoreAllCaps, IgnoreAllCaps ? "1" : "0");
        doc.AppendChild(root);
        XmlElement textElement = doc.CreateElement("text");
        textElement.InnerText = text;
        root.AppendChild(textElement);
        return doc.InnerXml;
    }

    #endregion
}
      // Replace the Spellchecker.php path with Asp.net ashx path

    spellchecker = new $.SpellChecker(body, {
        lang: 'en',
        parser: 'html',
        webservice: {
          path: "../Includes/JS/spellify/JQuerySpellCheckerHandler2.ashx",
          driver: 'google'
        },
        suggestBox: {
          position: 'below'
        }
      });

      // Bind spellchecker handler functions
      spellchecker.on('check.success', function() {
        alert('There are no incorrectly spelt words.');
      });

      spellchecker.check();