好吧,我終於完成了它。
- 我們最終創建了帶有一些代碼的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();
}
對不起,我不明白它將如何幫助我擺脫ASP.NET AJAX。 –
這解決了你陳述的問題「它膨脹了,我們不使用UpdatePanel」。新框架(如發佈的鏈接中所述)解決了這些問題。 –