首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >摆脱Microsoft

摆脱Microsoft
EN

Stack Overflow用户
提问于 2009-11-18 17:30:23
回答 5查看 612关注 0票数 2

我们使用Microsoft编写了几个控件(cs类+ js类)。现在我正在考虑摆脱它(只使用jQuery),因为它膨胀了,我们不使用UpdatePanel。我的问题是:我应该如何改变我的控制?现在,他们实现了IScriptControl,它使用Microsoft特性(如果我理解正确的话,ScriptManager & ScriptControlDescriptor类)。用什么代替?

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

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

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-26 09:23:11

好了,我终于完成了。

  1. 最后,我们创建了带有一些代码的Page后代,以替代脚本管理器(见下文)。我们使用控件的Page属性从控件的OnPreRender方法调用它。感谢http://dj.codeplex.com/的同事们提供了如何做到这一点的例子。

2,3,4.我们使用jQuery.data方法将脚本类的实例绑定到DOM元素。我们使用jQuery.ready方法执行实例化、初始化和绑定代码。此代码将使用AddScript方法添加到其呈现方法中的控件中(见下文)。也许稍后我们会使用JavaScriptSerializer将值从C#控件传递给javascript类,但目前我们用手将参数传递给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();
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-17 04:53:30

另一方面,您可以尝试comet方法,检查这些示例。

票数 2
EN

Stack Overflow用户

发布于 2009-11-18 18:51:41

jQuery和jQuery UI非常强大。但是你也可以使用Moo工具和原型。您使用的是MS AJAX中的哪些工具?在开源的非MS产品中,几乎有很多类似的东西。他们只是需要稍微多一点的劳动,在你的执行。您还可以查看Telerik和Syncfusions控件。Telerik为ASP.NET MVC提供了一系列开放源码的ajax服务,可以很容易地转换成ASP.NET的Web。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1757709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档