2009-11-18 82 views
2

我們用微軟的AJAX(cs class + js class)寫了幾個控件。現在我正在考慮擺脫它(只使用jQuery),因爲它臃腫,我們不使用UpdatePanel。我的問題是:我應該如何改變我的控制?現在他們實現了IScriptControl,它使用Microsoft AJAX功能(如果我理解正確,ScriptManager & ScriptControlDescriptor類)。代替使用什麼?擺脫微軟AJAX

CLARIFICATION。我不需要更多的JavaScript庫 - 我已經在使用jQuery,並希望儘量減少附加內容(除非它們非常小)。我需要的是替換ScriptManager和IScriptControl界面。諸如:

  1. 註冊腳本引用(和 不復制它們)。
  2. 實例化與控件關聯的腳本類。
  3. 將我的類綁定到DOM元素(使用jQuery的最好方法是什麼,順便說一句)?
  4. 正在初始化JS類字段。

回答

1

好吧,我終於完成了它。

  1. 我們最終創建了帶有一些代碼的Page Descendant來代替腳本管理器(見下文)。我們使用控件的Page屬性從控件的OnPreRender方法調用它。感謝來自http://dj.codeplex.com/的人提供瞭如何做到這一點的例子。

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(); 
} 
0

jQuery和jQuery用戶界面是非常強大的。但是你也可以使用Moo Tools和Prototype。您使用的是MS AJAX中的哪些工具?在開源非MS產品方面有很多可比的東西。他們只需要稍微多一些的勞動就可以實施。您也可以看看Telerik和Syncfusions控件。 Telerik爲ASP.NET MVC提供了一堆開源的ajax產品,可以很容易地將其轉換爲ASP.NET Web Forms。

0

你可能有興趣在.NET4即將發佈的更加輕薄條件呈現的特徵(與Visual Studio 2010中)

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

如果你能等待,它可能是一個可行的解決方案您。

+0

對不起,我不明白它將如何幫助我擺脫ASP.NET AJAX。 –

+0

這解決了你陳述的問題「它膨脹了,我們不使用UpdatePanel」。新框架(如發佈的鏈接中所述)解決了這些問題。 –

0

我不知道你需要IScriptControl和ScriptManager的更換,如果你希望只使用jQuery的。我建議你檢查一下創建jQuery插件的一些http://blog.jeremymartin.name/2008/02/building-your-first-jquery-plugin-that.html'>教程。

+0

在客戶端(javascript)方面我當然會創建插件。但我需要在代碼的服務器端(C#)中包含對JavaScript文件的引用並插入一些JS代碼塊。我發現ClientScriptManager,但它確實不方便... –

2

另一方面,您可以嘗試彗星ajax的方法,檢查these樣本。