日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

telerik学习记录-RadAjaxPanel

發布時間:2024/1/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 telerik学习记录-RadAjaxPanel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

RadAjaxPanel 用法

ajaxRequestWithTarget() 參考

ajaxRequest() 參考

常用的RadAjaxControl屬性

方法

服務器端編程

OnAjaxRequest

客戶端編程

ajaxRequest(arguments)

AjaxRequest事件

ajaxRequestWithTarget(eventTarget,eventArgument)

RadAjaxPanel對象

EVENT事件

RadAjaxManager/RadAjaxPanel的客戶端事件

OnRequestStart

OnResponseEnd

取消 AJAX 請求

客戶端確認和AJAX

傳遞更多參數

強制回發

為不同控件分配不同的客戶端事件

在AJAX更新上更改鼠標光標

RadAjaxPanel之間的交互

重定向到另外一個頁面

在AJAX之后滾動到頂部

加載用戶控件

從Ajaxifying中排除控件

使用 RadScriptManager 的 RegisterPostBackControl 方法

通過 OnRequestStart 事件禁用 AJAX(RadAjaxPanel、RadAjaxManager)

在 InitializeRequest 事件上取消 AJAX 請求

手動添加回發功能

排除動態加載的控件

AJAX 更新后執行自定義 Javascript 代碼

RadAjaxPanel 用法

如果要在頁面上啟用 Ajax 的 Web 控件,只需將RadAjaxPanel添加到頁面,然后將要進行回調的控件拖到RadAjaxPanel中。這些控件將開始執行回調而不是回發。

當其中一個控件發出 AJAX 請求時,整個RadAjaxPanel(內部包含所有控件)都會更新。因此,如果將整個頁面放入RadAjaxPanel中,這可能會導致性能降低,因為面板中的所有控件都將被更新,而不僅僅是 AJAX 啟動器。將整個頁面放入RadAjaxPanel在以下情況下可用頁面上的控件數量相對較少。

ajaxRequestWithTarget() 參考

可以使用任何外部控件通過調用此客戶端函數來強制RadAjaxPanel執行 AJAX 請求。使用此函數時,事件目標默認為RadAjaxPanel實例。

_DOPOSTBACK(EVENTTARGET,EVENTARGUMEN或$FIND("<%=RADAJAXPANEL1.CLIENTID%>").AJAXREQUESTWITHTARGET(EVENTTARGET, EVENTARGUMENT)

eventTarget 應該引發回發事件的控件。應該使用控件的UniqueID。

eventArgument 事件的可選參數

ajaxRequest() 參考

$FIND("<%=RADAJAXPANEL1.CLIENTID%>").AJAXREQUEST(參數)

arguments 控件在提出請求時使用的參數。

當在客戶端調用ajaxRequestWithTarget、ajaxRequest函數中的任何一個時,它可以在服務器上的 AjaxRequest 事件處理程序中進行處理。

常用的RadAjaxControl屬性

EnableAJAX - 當EnableAJAX屬性設置為true(默認值)時,所有請求(在RadAjaxPanel模板內或由RadAjaxManager管理的控件)都通過 AJAX 處理。如果此屬性為false,則以傳統回發方式處理請求。

EnableHistory - 當EnableHistory屬性設置為true(默認為false)時,即使使用 AJAX 也會啟用瀏覽器歷史記錄。瀏覽器的前進和后退按鈕按預期工作(僅限 IE 瀏覽器)。

EnablePageHeadUpdate - 當您將EnablePageHeadUpdate屬性設置為true(默認值)時,<Head>可以在 AJAX 更新期間修改 Page 元素。當控件初始化為不可見或根據 AJAX 請求動態加載控件時,會發現此功能特別有用。

IsAjaxRequest -當前請求通過 AJAX 時設置此屬性為true ,如果請求是標準回發,則設置此屬性為false 。

DefaultLoadingPanelID - 此屬性允許指定在更新啟用 AJAX 的控件時將顯示的默認LoadingPanel?

UpdatePanelsRenderMode - 此屬性確定呈現 ajax 面板的方式。當選擇Block選項時,面板將呈現為div元素,而如果選擇Inline選項,它們將呈現為span元素。

UpdateInitiatorPanelsOnly - 通過將此屬性設置為true(其默認值為false),只有為特定啟動器添加為UpdatedControls的容器將有條件地更新。

ResponseScripts - 此字符串集合包含您希望在響應返回到瀏覽器時執行的 JavaScript。

方法

RadAjaxManager和RadAjaxPanel都是從RadAjaxControl 繼承而來的,它引入了以下方法:

Alert()-此方法在客戶端上執行 JavaScript alert()。Alert()為要在警報中顯示的文本采用單個字符串參數。

FocusControl - 此方法將焦點放在指定的控件上。FocusControl()采用單個參數,該參數可以是要關注的控件的 ID,也可以是要關注的控件的對象引用。

GetAjaxEventReference - 此方法生成調用ajaxRequest()方法的客戶端代碼

RaisePostBackEvent - 此方法觸發服務器端AjaxRequest事件并允許您將單個字符串參數傳遞給事件。

Redirect-此方法將瀏覽器導航到另一個網頁。該方法傳遞一個字符串參數,即要導航到的 URL。

服務器端編程

OnAjaxRequest

AjaxRequest事件在由客戶端ajaxRequest()函數或服務器端RaisePostBackEvent()方法觸發時發生。活動不能取消。AjaxRequest事件處理程序接收單個字符串參數。

下面的示例演示了從客戶端和服務器觸發的 AjaxRequest。示例中定義了一個 HTML 輸入按鈕和一個標準 ASP.NET 按鈕。HTML 輸入按鈕觸發一個調用客戶端ajaxRequest()的函數。ASP.NET 按鈕觸發服務器端 OnClick 事件,該事件又調用RaisePostBackEvent()方法。

<form id="form1" runat="server"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" OnAjaxRequest="RadAjaxPanel_AjaxRequest"> </telerik:RadAjaxPanel><telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"><script type="text/javascript">function clientClick() {var ajaxManager = $find("<%= RadAjaxPanel1.ClientID %>");ajaxManager.ajaxRequest("client");}</script> </telerik:RadCodeBlock> <div><asp:Button ID="btnServer" runat="server" Text="Make server AjaxRequest" OnClick="btnServer_Click" /><input id="btnClient" type="button" value="Make client AjaxRequest" onclick="clientClick();" /> </div> </form> protected void btnServer_Click(object sender, EventArgs e){RadAjaxPanel1.RaisePostBackEvent("server");}protected void RadAjaxPanel1_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e){RadAjaxPanel1.Alert("AjaxRequest raised from the " + e.Argument);}

客戶端編程

可以使用客戶端API在Ajax請求時調用自己的JavaScript函數;也可以通過JavaScript函數從客戶端想服務器端發出顯示Ajax請求。

ajaxRequest(arguments)

在某些情況下,我們可能希望出發對服務器的回發/ajax請求。在這種情況下,我們可以使用ajaxRequest(arguments)函數來啟動通用AJAX請求。使用該函數時,時間的目標默認為RadAjaxPanel或RadAjaxManager 實例。參數是控件在發出請求時使用的參數。

AjaxRequest事件

當在客戶端調用ajaxRequest函數時,它可以在服務器上的Ajax Request事件處理程序中進行處理,如示例1。

實例1:在客戶端實行ajax請求,在服務器端處理。

<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"><script type="text/javascript">function InitiateAjaxRequest(arguments) {var ajaxPanel = $find("<%= RadAjaxPanel1.ClientID %>");ajaxPanel.ajaxRequest(arguments);}</script></telerik:RadCodeBlock> private void RadAjaxPanel1_AjaxRequest(object sender, AjaxRequestEventArgs e){//code to handle the generic AJAX request}

ajaxRequestWithTarget(eventTarget,eventArgument)

可以調用ajaxRequestWithTarget(eventTarget, eventArgument)函數來模擬由具有指定 UniqueID 和指定參數的另一個控件(?RadAjaxManagerRadAjaxPanel 除外)發送的回發/AJAX 請求。該函數的執行可以由服務器上的相應事件(即Button_Click)來處理。

eventTarget應該引發回發事件的控件。您應該始終使用控件的 UniqueID..
eventArgument這是事件的可選參數。

ajaxRequestWithTarget被設計為標準doPostBack 函數的替代品。因此,需要覆蓋頁面的 **RaisePostBackEvent 以便在服務器端獲取其參數。

示例 2展示了如何使用 AjaxRequestWithTarget。

示例 3:AjaxButton 強制 Button 引發回發事件。

<asp:ScriptManager ID="ScriptManager" runat="server" /> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"><input type="button" onclick="AjaxRequestButton(); return false;" value="AjaxButton" /><asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"></asp:Button><asp:TextBox ID="TextBox1" runat="server" Text=""></asp:TextBox> </telerik:RadAjaxPanel> <telerik:RadCodeBlock ID="cb1" runat="server"><script type="text/javascript">function AjaxRequestButton(arguments) {var ajaxPanel = $find("<%= RadAjaxPanel1.ClientID %>");ajaxPanel.ajaxRequestWithTarget('<%= Button1.UniqueID %>', '');}</script></telerik:RadCodeBlock>

后端代碼:

protected void Button1_Click(object sender, System.EventArgs e){TextBox1.Text = DateTime.Now.ToLongTimeString();}

RadAjaxPanel對象

下表列出了RadAjaxPanel客戶端對象的重要方法:

NAMEPARAMETERSRETURN TYPEDESCRIPTION
get_ajaxSettingsnonearray of objects返回一個設置數組,其中每個對象都具有 InitControlID 和另一個 UpdatedControls 數組的屬性。
get_defaultLoadingPanelIDnonestring返回 DefaultLoadingPanelID
get_enableAJAXnoneboolean如果啟用 AJAX,則為真。
get_enableHistorynoneboolean如果在 AJAX 請求期間啟用了瀏覽器歷史記錄,則為真
set_ajaxSettingsarray of objectsnone設置表示 AjaxSettings 的對象數組
set_defaultLoadingPanelIDstringnone設置 DefaultLoadingPanelID
set_enableAJAXbooleannone允許或阻止請求通過 AJAX 執行。傳遞 True 以允許 AJAX,False 以通過標準回發完成請求
set_enableHistorybooleannone

在 AJAX 請求期間允許瀏覽器歷史記錄。傳遞 True 以在 AJAX 請求期間允許瀏覽器歷史記錄

示例:

<script type="text/javascript">var ajaxPanel = $find("<%= RadAjaxPanel1.ClientID %>");var settings = ajaxPanel.get_ajaxSettings();var settingsList = '';for (setting in settings) {var initiatingControl = settings[setting].InitControlID;var controls = settings[setting].UpdatedControls;var controlList = '';for (control in controls) {controlList += ' ' + controls[control].ControlID;}settingsList += '\nInitiated by: ' + initiatingControl + '\nUpdated Controls: ' + controlList;}alert(settingsList);</script>

EVENT事件

RadAjaxManager/RadAjaxPanel的客戶端事件

RadAjaxManagerRadAjaxPanel都來自RadAjaxControlRadAjaxControl引入了包含以下事件的AjaxClientEvents屬性:

OnRequestStart????????當啟動對服務器的請求時觸發
OnRequestEnd在處理來自服務器的響應時觸發

要使用這些事件,只需編寫一個可在事件發生時調用的 JavaScript 函數(示例 1)。然后將 JavaScript 函數的名稱指定為相應屬性的值。

示例 1:在請求開始和結束時顯示一條消息。

<script type="text/javascript">function requestStart(sender, eventArgs) {alert('Request start');}function responseEnd(sender, eventArgs) {alert('Response complete');} </script> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" ClientEvents-OnRequestStart="requestStart" ClientEvents-OnResponseEnd="responseEnd" ><telerik:RadButton RenderMode="Lightweight" runat="server" Text="Click me!"></telerik:RadButton> </telerik:RadAjaxPanel>

OnRequestStart

OnRequestStart客戶端事件處理程序在啟動對服務器的請求時調用該事件最初可以由RadAjaxManager設置中配置的啟動控件、?RadAjaxPanel中的控件或客戶端ajaxRequest()調用觸發。活動可以取消。

使用以下方法將兩個參數傳遞給事件處理程序:

  • sender?- 客戶端RadAjaxManager?/?RadAjaxPanel對象的實例。

  • eventArgs,它有以下方法:

  • set_cancel()?- 允許或阻止 AJAX 請求繼續。調用set_cancel(true)會阻止請求繼續。

  • get_eventTarget()?- 獲取提出請求的元素的UniqueID 。

  • get_eventArgument()?- 獲取初始 AJAX 請求中傳遞的字符串。

  • get_eventTargetElement()?- 獲取引發 AJAX 請求的客戶端對象的實例。您可以迭代每個設置并檢索初始控件 ID 和另一個表示更新控件的對象數組。

  • get_enableAjax()?,?set_enableAjax()?- 獲取或設置是否執行 AJAX 請求。set_enableAjax(false)使請求通過標準回發來執行。

下面的示例顯示了發起請求的控件。

<script type="text/javascript">function requestStart(sender, eventArgs) {alert('Request start');} </script> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" ClientEvents-OnRequestStart="requestStart"><telerik:RadButton RenderMode="Lightweight" runat="server" Text="Click me!"></telerik:RadButton> </telerik:RadAjaxPanel>

OnResponseEnd

當從服務器接收到請求時,將調用OnResponseEnd客戶端事件處理程序。活動不能取消。

使用以下方法將兩個參數傳遞給事件處理程序:

  • sender?- 客戶端RadAjaxManager?/?RadAjaxPanel對象的實例。

  • eventArgs,它有以下方法:

  • get_eventTarget()?- 獲取提出請求的元素的UniqueID 。

  • get_eventArgument()?- 獲取初始 AJAX 請求中傳遞的字符串。

  • get_eventTargetElement()?- 獲取引發 AJAX 請求的客戶端對象的實例。

以下示例顯示了發起請求的控件。

<script type="text/javascript">function responseEnd(sender, eventArgs) {alert('Response complete');} </script> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" ClientEvents-OnResponseEnd="responseEnd" ><telerik:RadButton RenderMode="Lightweight" runat="server" Text="Click me!"></telerik:RadButton> </telerik:RadAjaxPanel>

取消 AJAX 請求

可以在 RadAjaxManager/RadAjaxPanel 的OnRequestStart客戶端事件處理程序中取消 AJAX 請求。調用set_cancel(true)可防止請求繼續。

<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"><script type='text/javascript'>function OnRequestStart(ajaxPanel, eventArgs) {var eventTarget = eventArgs.get_eventTarget();if (eventTarget == "<%= Button1.UniqueID %>") {if (!CheckZipCode()) {eventArgs.set_enableAjax(false); // cancel the ajax request}}}function CheckZipCode() {var zipCode = $get('<%= TextBox1.ClientID %>').value;if (zipCode.length != 5) {alert('Please enter a valid 5 digit postal code!');return false;}else {var fiveDigitCheckRE = /^\d{5}$/ //regular expression for checking a 5 digit numberif (zipCode.search(fiveDigitCheckRE) == -1) {alert("Only digits are allowed!");return false;}}return true;}</script> </telerik:RadCodeBlock>

客戶端確認和AJAX

可能需要向用戶提供一個確認對話框,并在接受時啟動 AJAX 請求。使用標準回發的確認通常如下所示:

<asp:ImageButton ID="ImageButton1" runat="server" OnClientClick="return confirm('Are you sure?');" />

當通過向RadAjaxManager添加必要的 AJAX 設置或將按鈕放置在RadAjaxPanel控件中時,應稍微更改OnClientClick以使用 AJAX。

<asp:ImageButton ID="ImageButton2" runat="server" OnClientClick="if (!confirm('Are you sure?')) return false;" />

或者,我們可以使用OnRequestStart客戶端事件來實現更復雜的邏輯。示例 1顯示了一個示例腳本。

示例 1:使用 OnRequestStart 客戶端事件顯示確認消息。

<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript">function OnRequestStart(ajaxControl, eventArgs) {var eventTarget = eventArgs.get_eventTarget(); if (eventTarget == "<%= ImageButton1.UniqueID %>") {return confirm('Are you sure?');}else {return false;}} </script> </telerik:RadCodeBlock>

傳遞更多參數

默認情況下,ajaxRequestajaxRequestWithTarget函數只接受一個參數。有時可能需要傳遞更多參數。可以通過加入客戶端上的參數來做到這一點:

var arg3 = arg1 + "," + arg2; ajaxPanel.ajaxRequest(arg3);

并在RadAjaxPanel1_AjaxRequest的服務器上拆分它們:

private void RadAjaxPanel1_AjaxRequest(object sender, AjaxRequestEventArgs e) {string argument = (e.Argument);String[] stringArray = argument.Split(",".ToCharArray()); }

強制回發

如果我們想執行單個回發而不是 AJAX 請求,arguments.EnableAjax應該是false

在代碼隱藏中:

if (!RadAjaxPanel1.EnableAJAX){RadAjaxPanel1.ClientEvents.OnRequestStart = "OnRequestStart";}

在客戶端:

function OnRequestStart(sender, args) {args.set_enableAjax(false); }

僅當要執行單個回發時,此方法才有用。如果因為瀏覽器不支持或支持的舊版本而想要禁用 AJAX,應執行此操作:

RadAjaxPanel1.EnableAJAX = Page.Request.Browser.SupportsXmlHttp;

為不同控件分配不同的客戶端事件

為了將不同的客戶端事件分配給不同的啟用 AJAX 的控件,可以使用示例 1中所示的方法。

示例 1:可以使用 RadAjaxManager 的客戶端事件來確定 AJAX 請求的目標控件。

<telerik:RadAjaxPanel runat="server" ID="RadAjaxPanel1" ClientEvents-OnRequestStart="Start" ClientEvents-OnResponseEnd="End"><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"><asp:ListItem>111</asp:ListItem><asp:ListItem>222</asp:ListItem></asp:DropDownList> </telerik:RadAjaxPanel> <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"><script type="text/javascript">function Start(sender, arguments) {if (arguments.EventTarget == "<%= Button1.UniqueID %>") {alert("StartButton");}if (arguments.EventTarget == "<%= DropDownList1.UniqueID %>") {alert("StartDropdown");}}function End(sender, arguments) {if (arguments.EventTarget == "<%= Button1.UniqueID %>") {alert("EndButton");} if (arguments.EventTarget == "<%= DropDownList1.UniqueID %>") {alert("EndDropdown");}}</script> </telerik:RadCodeBlock>

這樣DropDownListButton將具有不同的客戶端事件,盡管它們使用相同的RadAjaxManagerRadAjaxPanel

在AJAX更新上更改鼠標光標

可以使用 Telerik RadAjax 控件的客戶端事件來更改 Ajax 更新時的鼠標光標。最簡單的方法是使用以下事件腳本:

<script type="text/javascript">function RequestStart(sender, args) {document.body.className = document.body.className.replace("Normal", "Wait");}function ResponseEnd(sender, args) {document.body.className = document.body.className.replace("Wait", "Normal"); </script> <style type="text/css">.Wait{}.Normal{}/* override input cursors with a more specific CSS selector */.Wait INPUT{cursor: wait;}.Normal INPUT{cursor: default;}/* override grid cursors with a more specific CSS selector */.Wait TABLE{cursor: wait;}.Normal TABLE{cursor: default;} </style>

RadAjaxPanel之間的交互

此處一個代碼示例,展示了如何在不使用RadAjaxManager的情況下在兩個RadAjaxPanel控件之間進行交互。?Telerik 建議使用RadAjaxManager,盡管可能,但不支持本文中討論的技術。

Telerik 將RadAjaxPanel控件設計為僅更新其內容控件,因此 Telerik Support 始終建議在需要更新外部控件時使用RadAjaxManager 。

但是,可以在不使用RadAjaxManager的情況下實現面板之間的交互。下面的示例演示了一種使用ResponseScripts屬性以及客戶端 ajaxRequest()函數的技術。請注意Page_PreRender事件的使用以及 ViewState 中持久化的屬性。

下面的示例演示如何處理來自一個RadAjaxPanel的 AJAX 請求,以及如何從我們要更新的RadAjaxPanel發起 AJAX 請求。

<telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <h3>Panel1</h3> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"> <asp:Button ID="btnIncrease" OnClick="btnIncrease_Click" Text="Increase" runat="server"> </asp:Button> <asp:Label ID="Label1" runat="server">0</asp:Label> <asp:TextBox ID="TextBox1" Text="0" runat="server"></asp:TextBox> </telerik:RadAjaxPanel> <h3>Panel2</h3> <telerik:RadAjaxPanel ID="RadAjaxPanel2" runat="server"> <asp:Button ID="btnDecrease" OnClick="btnDecrease_Click" Text="Decrease" runat="server"> </asp:Button> <asp:Label ID="Label2" runat="server">0</asp:Label> <asp:TextBox ID="TextBox2" Text="0" runat="server"></asp:TextBox> </telerik:RadAjaxPanel> protected void Page_PreRender(object sender, EventArgs e) {if (RadAjaxPanel1.IsAjaxRequest || RadAjaxPanel2.IsAjaxRequest){TextBox1.Text = Label1.Text = TextBox2.Text = Label2.Text = Count.ToString();} } public int Count {get{return this.ViewState["Count"] == null ? 0 : (int)this.ViewState["Count"];}set{this.ViewState["Count"] = value;} } protected void btnIncrease_Click(object sender, System.EventArgs e) {Count++;RadAjaxPanel1.ResponseScripts.Add(String.Format("$find('{0}').ajaxRequest();", RadAjaxPanel2.ClientID)); } protected void btnDecrease_Click(object sender, System.EventArgs e) {Count--;RadAjaxPanel2.ResponseScripts.Add(String.Format("$find('{0}').ajaxRequest();", RadAjaxPanel1.ClientID)); }

重定向到另外一個頁面

從服務器重定向到新頁面有兩種基本類型:

  • Response.Redirect()?- 標準的 ASP.NET 重定向方法。

  • 生成設置window.location.href的 JavaScript 。

如果 Response.Redirect() 不起作用(例如,如果在部分渲染期間調用),可以通過 RadAjaxManager 和 RadAjaxPanel 公開的 RadAjaxControl.Redirect() 服務器方法使用腳本生成方法。

此 Telerik 方法注冊 JavaScript 代碼,該代碼使用window.location.href屬性導航到新 URL,同時為您提供使用簡單服務器方法的便利。

示例 1:使用RadAjaxManager?Redirect()

RadAjaxManager1.Redirect("http://www.google.com/"); //or RadAjaxManager.GetCurrent(Page).Redirect("http://www.google.com/");

示例 1:使用RadAjaxPanel?Redirect()

RadAjaxPanel1.Redirect("http://www.google.com/");

在AJAX之后滾動到頂部

示例1演示了在 AJAX 面板中啟用 AJAX 的控件更新后如何將頁面滾動到頂部。

默認情況下,RadAjaxPanel在響應結束時保持 AJAX 化控件的焦點。例如,如果在 AJAX 面板控件中嵌入了頁面底部的按鈕,則更新完成后該按鈕仍將獲得焦點。如果此按鈕位于較長頁面的底部附近,您可能需要在 AJAX 更新結束后將頁面滾動到頂部(可能會放置更新的控件)。您可以使用示例 1中的 JavaScript 函數來執行此操作。

示例 1:此 JavaScript 函數將強制頁面滾動到頂部

<script type="text/javascript">function scrollTop() {window.document.body.scrollTop = 0;window.document.documentElement.scrollTop = 0;} </script>

必須將示例 1中的函數添加到RadAjaxPanel控件的ResponseScripts集合中,以便在 AJAX 調用之后執行它。

示例 2:將 scrollTop() 添加到 ResposeScripts 集合。

private void Page_Load(object sender, System.EventArgs e) {RadAjaxPanel1.ResponseScripts.Add("scrollTop();"); }private void cmd1_Click(object sender, System.EventArgs e) {lbl1.Text = System.DateTime.Now.ToString;//set no active elementRadAjaxPanel1.ActiveElementID = null; }

RadAjaxManager控件在異步請求后不會保持對活動控件的關注。如果需要聚焦特定控件,可以使用RadAjaxManager FocusControl方法。

加載用戶控件

用戶控件的動態加載遵循與普通回發應用程序相同的邏輯。可以按照以下步驟通過 AJAX 請求加載 customUserControls:

  • 首先需要有一個合適的容器來存放它,例如 asp:Panel。

  • 在Page_InitPage_Load中實例化用戶控件,并始終重新創建最后加載的用戶控件:

  • UserControl MyControl = (UserControl)LoadControl(controlName); LoadMyUserControl(CurrentControl, Panel1);

    ? ? ? ? ? 3.確保為動態加載的用戶控件分配一個唯一的ID

    string userControlID = controlName.Split('.')[0]; MyControl.ID = userControlID.Replace("/", "").Replace("~", "");

    ? ? ? ? ? 4.將實例放在容器的空間集合里

    Parent.Controls.Add(MyControl)

    示例:以下示例演示了如何在簡單的場景中實現上述步驟。

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <asp:Button ID="Button1" runat="server" Text="Load WebUserControl1.ascx" OnClick="Button1_Click" /> <asp:Button ID="Button2" runat="server" Text="Load WebUserControl2.ascx" OnClick="Button2_Click" /> <asp:Panel ID="Panel1" runat="server"> </asp:Panel> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"><AjaxSettings><telerik:AjaxSetting AjaxControlID="Button1"><UpdatedControls><telerik:AjaxUpdatedControl ControlID="Panel1" /></UpdatedControls></telerik:AjaxSetting><telerik:AjaxSetting AjaxControlID="Button2"><UpdatedControls><telerik:AjaxUpdatedControl ControlID="Panel1" /></UpdatedControls></telerik:AjaxSetting></AjaxSettings> </telerik:RadAjaxManager>

    后端代碼:

    protected void Page_Load(object sender, EventArgs e) {if (this.CurrentControl != string.Empty){LoadMyUserControl(CurrentControl, Panel1);} } protected void Button1_Click(object sender, EventArgs e) {this.LoadMyUserControl("~/WebUserControl1.ascx", Panel1); } protected void Button2_Click(object sender, EventArgs e) {this.LoadMyUserControl("~/WebUserControl2.ascx", Panel1); }private string CurrentControl {get{return this.ViewState["CurrentControl"] == null ? string.Empty : (string)this.ViewState["CurrentControl"];}set{this.ViewState["CurrentControl"] = value;} }private void LoadMyUserControl(string controlName, Control parent) {parent.Controls.Clear();UserControl MyControl = (UserControl)LoadControl(controlName);string userControlID = controlName.Split('.')[0];MyControl.ID = userControlID.Replace("/", "").Replace("~", "");parent.Controls.Add(MyControl);this.CurrentControl = controlName; }

    加載用戶控件的在線演示

    從Ajaxifying中排除控件

    默認情況下,RadAjaxPanel?AJAX 啟用所有放置在里面的控件。如果要排除某個控件啟用 AJAX,可以使用以下方法之一:

    • 使用RadScriptManager的RegisterPostBackControl方法

    • 通過OnRequestStart事件禁用AJAX(RadAjaxPanel、RadAjaxManager)

    • 在 InitializeRequest 事件上取消 AJAX 請求

    • 手動添加回發功能

    • 排除動態加載的控件

    使用 RadScriptManager 的 RegisterPostBackControl 方法

    可以使用RadScriptManager 的 RegisterPostBackControl方法(示例 1)。

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager><telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"><asp:Button runat="server" ID="Button1" Text="Ajax" OnClick="Button_Click" /><asp:Button runat="server" ID="Button2" Text="Postback" OnClick="Button_Click" /><asp:Label ID="Label1" runat="server"></asp:Label></telerik:RadAjaxPanel> protected void Page_Load(object sender, EventArgs e){RadScriptManager1.RegisterPostBackControl(Button2);} protected void Button_Click(object sender, EventArgs e){Label1.Text = DateTime.Now.ToLongTimeString();}

    當頁面使用RadAjaxManager啟用 AJAX 時,此方法不適用。

    通過 OnRequestStart 事件禁用 AJAX(RadAjaxPanel、RadAjaxManager)

    使用OnRequestStart客戶端事件處理程序來確定 AJAX 發起程序并為當前請求禁用 AJAX。每個請求都會觸發該事件,因此在下一個請求時,將執行相同的檢查。從啟用 AJAX 的網格導出時,經常使用類似的實現:

    在啟用 AJAX 的情況下將 RadGrid 內容導出到 Excel/Word/CSV/PDF

    請注意,在RadAjaxManager AJAX 設置的UpdatedControls集合中添加的所有控件都將執行回調而不是回發。要從 ajaxifying 中排除它們,請使用上述方法。

    在 InitializeRequest 事件上取消 AJAX 請求

    這種方式適用于在廣泛的場景中取消 AJAX 請求(示例 2))。與OnRequestStart事件不同,InitializeRequest將為 Telerik(RadAjaxManagerRadAjaxPanel)和 ASP.NET(UpdatePanel)AJAX 控件觸發。

    示例 2:您可以使用 PageRequestManager 的實例添加自定義邏輯

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server" /> <script type="text/javascript">Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initRequest);function initRequest(sender, args){if (args.get_postBackElement().id.indexOf("CONTROL_ID") != -1){args.set_cancel(true); //stop async requestsender._form["**EVENTTARGET"].value = args.get_postBackElement().id.replace(/\_/g, "$");sender._form["**EVENTARGUMENT"].value = "";sender._form.submit();return;}} </script>

    請注意,您必須將 CONTROL_ID 字符串替換為觸發 AJAX 請求的控件的實際名稱。

    手動添加回發功能

  • 在?aspx/ascx 文件中實現realPostBack函數1。

  • 將自定義OnClick屬性添加到控件(在本例中為按鈕)(示例 3))。

  • 示例 3:ASPX

    <telerik:RadCodeBlock ID="codeblock1" runat="server"> <script type="text/javascript">function realPostBack(eventTarget, eventArgument){find("<%= RadAjaxPanel1.ClientID %>").__doPostBack(eventTarget, eventArgument);} </script> </telerik:RadCodeBlock> <asp:Button ID="Button1" runat="server" Text="Button" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server"><asp:LinkButton ID="LinkButton1" runat="server" Text="PostBack"></asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server" Text="Ajax"></asp:LinkButton> </telerik:RadAjaxPanel>

    在后端代碼(Page_Load事件處理程序)中:

    protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){LinkButton1.Attributes.Add("onclick", string.Format("realPostBack(\"{0}\", \"\"); return false;", LinkButton1.UniqueID));}}

    如果沒有在頁面上注冊__doPostBack函數的控件,還應該在Page_Load中添加以下行:

    this.Page.ClientScript.GetPostBackEventReference(this, "");

    當想要單個控件為您的場景執行回發或想要從RadAjaxPanel中的控件上傳文件時,這將派上用場。

    排除動態加載的控件

    如果正在動態加載用戶控件,則示例 3中的Page_Load事件處理程序中的代碼 if(!Page.IsPostBack) 永遠不會執行可以檢查附加的OnClick事件而不是IsPostBack,如示例 4所示。

    protected void Page_Load(object sender, EventArgs e){bool isOnClickAttached = false;IEnumerator keys = this.CheckBox1.Attributes.Keys.GetEnumerator();while (keys.MoveNext()){if (keys.Current.Equals("onClick")){isOnClickAttached = true;break;}}if (!isOnClickAttached)this.CheckBox1.Attributes.Add("onClick", string.Format("realPostBack(\"{0}\", \"\"); return false;", this.CheckBox1.UniqueID));}

    AJAX 更新后執行自定義 Javascript 代碼

    Telerik?RadAjax提供了執行作為服務器響應的自定義 JavaScript 代碼的能力,從而能夠更靈活地在客戶端上完成更具體或更復雜的任務。接下來展示了在 AJAX 更新后執行自定義 JavaScript 代碼的幾種方法。

    最好和最直觀的方法是使用RadAjaxPanelRadAjaxManager的ResponseScripts屬性。

    示例 1顯示了如何在單擊 Button 時彈出警報。

    protected void Button1_Click(object sender, System.EventArgs e){RadAjaxPanel1.ResponseScripts.Add(string.Format("alert('Hello from the server! Server time is {0}');", DateTime.Now.ToLongTimeString()));}

    示例 2顯示了另一種方法。可以使用ScriptManager類的RegisterStartupScript靜態方法:

    protected void Button1_Click(object sender, EventArgs e){string script = string.Format("alert('Hello from the server! Server time is {0}');", DateTime.Now.ToLongTimeString());ScriptManager.RegisterStartupScript(Page, typeof(Page), "myscript", script, true);}

    可以使用PageRequestManager類的pageLoaded事件。

    總結

    以上是生活随笔為你收集整理的telerik学习记录-RadAjaxPanel的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。