ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClearCaching.aspx.cs" Inherits="Web_PersonnelInfoQuery_ClearCaching" %>
<%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Sample Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<telerik:RadAjaxPanel ID="myPanel" runat="server" LoadingPanelID="RadAjaxLoadingPanel1">
<telerik:RadDatePicker ID="RadDatePicker1" Runat="server" AutoPostBack="True"
onselecteddatechanged="RadDatePicker1_SelectedDateChanged">
<DateInput InvalidStyleDuration="100" autopostback="True"></DateInput>
</telerik:RadDatePicker>
</telerik:RadAjaxPanel>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" Runat="server"
height="75px" Transparency="15" width="75px">
<img alt="Loading..."
src='<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>' originalAttribute="src" originalPath="<%= RadAjaxLoadingPanel.GetWebResourceUrl(Page, "Telerik.Web.UI.Skins.Default.Ajax.loading.gif") %>"
style="border:0px;" />
</telerik:RadAjaxLoadingPanel>
</form>
</body>
</html>
C#:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Web_PersonnelInfoQuery_ClearCaching : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void RadDatePicker1_SelectedDateChanged(object sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
{
// do something here
string s = string.Format("this is {0} test", "a");
s += "!";
}
}
Note that we make Web_PersonnelInfoQuery_ClearCaching inherited from BasePage, and the code of BasePage is quite simple.
BasePage:
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Text.RegularExpressions;
using System.Text;
public class BasePage : Page
{
protected override void Render(HtmlTextWriter writer)
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
string html = stringWriter.ToString();
MatchCollection collection = Regex.Matches(html, "<(a|link|img|script|input|form).[^>]*(href|src|action)=(\\\"|'|)(.[^\\\"']*)(\\\"|'|)[^>]*>", RegexOptions.IgnoreCase);
foreach (Match match in collection)
{
if (match.Groups[match.Groups.Count - 2].Value.IndexOf("~") != -1)
{
string url = this.Page.ResolveUrl(match.Groups[match.Groups.Count - 2].Value);
html = html.Replace(match.Groups[match.Groups.Count - 2].Value, url);
}
}
#endregion
writer.Write(html);
}
}
what surprised me is that base.Render(htmlWriter) was executed twice, as long as we put RadAjaxPanel on a page, but other controls such as RadGrid, DatePicker, RadToolbar, MS UpdatePanel... work perfectly.
can anybody tell me why?