摆脱Microsoft AJAX

时间:2009-11-18 17:30:23

标签: c# asp.net jquery asp.net-ajax

我们使用Microsoft AJAX(cs class + js class)编写了几个控件。现在我正在考虑摆脱它(只使用jQuery),因为它是膨胀的,我们不使用UpdatePanel。我的问题是:我应该如何更改控件?现在他们实现了IScriptControl,它使用Microsoft AJAX功能(如果我理解正确的话,可以使用ScriptManager和ScriptControlDescriptor类)。使用什么呢?

澄清。我不需要更多的JavaScript库 - 我已经在使用jQuery并希望最小化其他包含(除非它们非常小)。我需要的是替换ScriptManager和IScriptControl接口。比如:

  1. 注册脚本引用(和 不重复它们)。
  2. 实例化与控件关联的脚本类。
  3. 将我的类绑定到DOM元素(使用jQuery的最佳方法是什么,顺便说一下?)。
  4. 初始化JS类字段。

5 个答案:

答案 0 :(得分:2)

另一方面,您可以尝试彗星ajax方法,检查these样本。

答案 1 :(得分:1)

好的,我终于完成了它。

  1. 我们最终使用其中的一些代码创建了Page descendant以替换脚本管理器(见下文)。我们使用control的Page属性从控件的OnPreRender方法调用它。感谢来自http://dj.codeplex.com/的人提供了如何操作的示例。
  2. 2,3,4。我们使用jQuery.data方法将脚本类的实例绑定到DOM元素。我们使用jQuery.ready方法执行实例化,初始化和绑定代码。使用AddScript方法将此代码添加到其Render方法中进行控制(参见下文)。也许以后我们会使用JavaScriptSerializer将值从C#控件传递到javascript类,但是目前我们手工完成,将参数传递给javascript类构造函数。

    HashSet<string> scriptReferences = new HashSet<string>();
    HashSet<string> cssReferences = new HashSet<string>();
    List<string> styles = new List<string>();
    
    public void AddScriptReference(string url, bool resolve)
    {
        string realUrl = url;
        if (resolve)
            realUrl = ResolveClientUrl(url);
    
        if (!scriptReferences.Contains(realUrl))
        {
            scriptReferences.Add(realUrl);
            Header.Controls.Add(
                new LiteralControl(
                    "<script type='text/javascript' src='" +
                    realUrl + "'></script>"));
        }
    }
    
    public void AddCssReference(string url)
    {
        if (!cssReferences.Contains(url))
        {
            cssReferences.Add(url);
            HtmlLink link = new HtmlLink();
            //link.Href = ResolveClientUrl("~/jQuery-ui/css/ui-lightness/jquery-ui.css");
            link.Href = url;
            link.Attributes.Add("type", "text/css");
            link.Attributes.Add("rel", "stylesheet");
            Header.Controls.Add(link);
        }
    }
    
    public void AddCssStyle(string style)
    {
        styles.Add(style);
    }
    
    protected override void OnPreRenderComplete(EventArgs e)
    {
        base.OnPreRenderComplete(e);
        Header.Controls.Add(
            new LiteralControl(
                "<style type='text/css'>" + styles.Join("\n") + "</style>"
            )
        );
    }
    
    public static void AddScript(HtmlTextWriter writer, string script,
        bool executeWhenReady)
    {
        writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");
        writer.RenderBeginTag(HtmlTextWriterTag.Script);
        if (executeWhenReady)
        {
            writer.Write("$(function(){\n");
        }
        writer.Write(script);
        if (executeWhenReady)
        {
            writer.Write("});\n");
        }
    
        writer.RenderEndTag();
    }
    

答案 2 :(得分:0)

jQuery和jQuery UI非常强大。但您也可以访问Moo Tools和Prototype。你在MS AJAX中使用哪些工具?在开源非MS产品中有很多可比的东西。他们只需要更多的劳动力来实施。您还可以查看Telerik和Syncfusions控件。 Telerik为ASP.NET MVC提供了一堆开源的ajax,可以很容易地转换为ASP.NET Web Forms。

答案 3 :(得分:0)

您可能对即将发布的.NET4(以及Visual Studio 2010)中更轻量级的条件呈现功能感兴趣

http://msdn.microsoft.com/en-us/magazine/ee335716.aspx

如果你可以等,这对你来说可能是一个可行的解决方案。

答案 4 :(得分:0)

如果你想严格使用jQuery,我不确定你需要替换IScriptControl和Scriptmanager。我建议你查看一些关于创建jQuery插件的http://blog.jeremymartin.name/2008/02/building-your-first-jquery-plugin-that.html'>tutorials。