Hello,
Below is some code to demonstrate my problem​ :
I use a grid with 3 pages, each containing ​only one ​row for simplicity.. The ​grid contains ​an hyperlink column (another is visible here only for verification).
The first page is displayed by default and then we can observe ​a correct URL to the passage of the mouse over it.
Changing page call​s PageMethods to get data client side, and ​oddly the url is lost... However, verification column displays the correct URL.
Thank you in advance for your help.
TestHyperLinkColumn.aspx :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestHyperLinkColumn.aspx.cs" Inherits="Test.TestHyperLinkColumn" %><!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></title></head><body> <form id="form1" runat="server"> <div> <telerik:RadCodeBlock runat="server" ID="RadScriptBlock1"> <script type="text/javascript"> //<![CDATA[ function RadGrid1_Command(sender, args) { args.set_cancel(true); $find("<%= RadAjaxLoadingPanel1.ClientID %>").show("<%= RadGrid1.ClientID %>"); var currentPageIndex = sender.get_masterTableView().get_currentPageIndex(); PageMethods.GetData(currentPageIndex + 1, updateGrid); } function updateGrid(result) { //Bind Grid var tableView = $find("<%= RadGrid1.ClientID %>").get_masterTableView(); var $ = $telerik.$; result = $.parseJSON(result); tableView.set_dataSource(result); tableView.dataBind(); $find("<%= RadAjaxLoadingPanel1.ClientID %>").hide("<%= RadGrid1.ClientID %>"); } //]]> </script> </telerik:RadCodeBlock> <telerik:RadScriptManager runat="server" EnableCdn="true" ID="RadScriptManager1" EnablePageMethods="true" /> <telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1"> </telerik:RadAjaxLoadingPanel> <div> <telerik:RadGrid runat="server" ID="RadGrid1" AllowFilteringByColumn="true" FilterType="CheckList" AllowPaging="true" PagerStyle-AlwaysVisible="true" AllowSorting="true"> <MasterTableView AutoGenerateColumns="False" PageSize="1" AllowFilteringByColumn="false"> <Columns> <telerik:GridHyperLinkColumn DataTextField="Link" HeaderText="Link" Target="_blank" DataType="System.String" DataNavigateUrlFields = "LinkURL"> </telerik:GridHyperLinkColumn> <telerik:GridBoundColumn DataField="LinkURL" HeaderText="LinkURL" DataType="System.String" Visible="true"> </telerik:GridBoundColumn> </Columns> </MasterTableView> <PagerStyle AlwaysVisible="true" Mode="NumericPages" /> <ClientSettings EnableRowHoverStyle="true"> <ClientEvents OnCommand="RadGrid1_Command" /> </ClientSettings> </telerik:RadGrid> </div> </div> </form></body></html>
TestHyperLinkColumn.aspx.cs :
using System;using System.Collections.Generic;using System.Data;using System.Web.Services;using System.Web.UI;namespace Test{ public partial class TestHyperLinkColumn : Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { RadScriptManager1.EnablePageMethods = true; DataTable data = GetDataTable(1, true); RadGrid1.MasterTableView.DataSource = data; RadGrid1.DataBind(); } } private static string ConvertDataTabletoString(System.Data.DataTable dt) { System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); Dictionary<string, object> row; foreach (System.Data.DataRow dr in dt.Rows) { row = new Dictionary<string, object>(); foreach (System.Data.DataColumn col in dt.Columns) { row.Add(col.ColumnName, dr[col]); } rows.Add(row); } return serializer.Serialize(rows); } private static DataTable GetDataTable(int pageIndex, bool first = false) { DataTable dt = new DataTable(); dt.Columns.Add("Link", typeof(string)); dt.Columns.Add("LinkURL", typeof(string)); DataRow dr = dt.NewRow(); dr[0] = string.Format("Link{0}", pageIndex); dr[1] = string.Format("http://www.link{0}.com", pageIndex); dt.Rows.Add(dr); pageIndex++; if (first) { //Adds 2 rows only for pager because data not used (loaded from PageMethods) dr = dt.NewRow(); dr[0] = ""; dr[1] = ""; dt.Rows.Add(dr); pageIndex++; dr = dt.NewRow(); dr[0] = ""; dr[1] = ""; dt.Rows.Add(dr); } return dt; } [WebMethod] public static string GetData(int PageIndex) { DataTable dt = GetDataTable(PageIndex); string result = ConvertDataTabletoString(dt); return result; } }}