Exclude Controls from Ajaxifying
By default the RadAjaxPanel AJAX-enables all controls placed inside. If you want to exclude a control from being AJAX-enabled, you can use one of the following approaches:
This help article shows how to use each approach.
Use RadScriptManager's RegisterPostBackControl Method
You can use the RadScriptManager's RegisterPostBackControl method (Example 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();
}
This approach is not applicable when the page is AJAX-enabled with RadAjaxManager .
Disable AJAX via the OnRequestStart Event (RadAjaxPanel, RadAjaxManager)
Use the OnRequestStart client-side event handler to determine the AJAX initiator and disable AJAX for the current request. The event is fired on each request so on the next request, the same check will be performed. A similar implementation is often used when exporting from an AJAX-enabled Grid:
Export RadGrid content to Excel/Word/CSV/PDF with AJAX enabled
Note that all controls added in the UpdatedControls collection in the RadAjaxManager AJAX settings would perform a callback instead of a Postback. To exclude them from ajaxifying use the above approach.
Cancel the AJAX Request on InitializeRequest Event
This approach is suitable for cancelling the AJAX request in a wide range of scenarios (Example 2)). Unlike the OnRequestStart event, the InitializeRequest will be triggered for both Telerik (RadAjaxManager , RadAjaxPanel ) and ASP.NET (UpdatePanel ) AJAX controls.
Example 2: You can add your custom logic using the instance of the 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 request
sender._form["**EVENTTARGET"].value = args.get_postBackElement().id.replace(/\_/g, "$");
sender._form["**EVENTARGUMENT"].value = "";
sender._form.submit();
return;
}
}
</script>
Please note that you have to replace the CONTROL_ID string with the actual name of the control that triggers the AJAX request.
Add the Postback Function Manually
-
Implement the realPostBack function into your aspx/ascx file1.
-
Add a custom OnClick attribute to the control (Button in this case)(Example 3)).
Example 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>
And in the code-behind (Page_Load event handler):
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
LinkButton1.Attributes.Add("onclick", string.Format("realPostBack(\"{0}\", \"\"); return false;", LinkButton1.UniqueID));
}
}
If you do not have a control that registers the __doPostBack function on the page you should add the following line in the Page_Load as well:
this.Page.ClientScript.GetPostBackEventReference(this, "");
This will come in handy when you want a single control to perform the Postback for your scenario or you want to upload files from a control in RadAjaxPanel .
Exclude Dynamically Loaded Controls
If you are loading the user control dynamically, the code if (!Page.IsPostBack) in Example 3 in its Page_Load event handler is never executed. You can check for the attached OnClick event instead of the IsPostBack as shown in Example 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));
}