Hi,
For some reason when I press the + button on the RadGrid it doesnt trigger onbeforeload. However when I click the "Add new record" LinkButton is does, which is not desired. Below i have attached sample code to reproduce this behavior. Is there valid Telerik solution to this problem, other then the one I have provided at the end of this post?
As i mentioned before, I have found a workaround by doing the following:
where the function itself has no code:
Thanks,
Aash.
For some reason when I press the + button on the RadGrid it doesnt trigger onbeforeload. However when I click the "Add new record" LinkButton is does, which is not desired. Below i have attached sample code to reproduce this behavior. Is there valid Telerik solution to this problem, other then the one I have provided at the end of this post?
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="OnBeforeUnloadRadGridIssue._Default" %> <%@ 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>OnBeforeUnload RadGrid Issue</title> <script type="text/javascript"> var newSourceFilesAdded; window.onbeforeunload = function (event) { if (newSourceFilesAdded) { return 'Are you sure?'; } } </script> </head> <body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" UpdatePanelRenderMode="Inline" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <div> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default"> </telerik:RadAjaxLoadingPanel> </div> <telerik:RadGrid ID="RadGrid1" runat="server" CellSpacing="0" GridLines="None"> <MasterTableView ClientDataKeyNames="DocumentId, FileName" Width="100%" CommandItemDisplay="Top"> <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings> <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"> </RowIndicatorColumn> <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"> </ExpandCollapseColumn> <Columns> <telerik:GridBoundColumn DataField="FileName" HeaderText="Filename" SortExpression="FileName" UniqueName="FileName" ReadOnly="true"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="WordCount" HeaderText="Word Count" SortExpression="WordCount" UniqueName="WordCount" ItemStyle-Width="50px"> <ItemStyle Width="50px"></ItemStyle> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="PageCount" HeaderText="Page Count" SortExpression="PageCount" UniqueName="PageCount" ItemStyle-Width="50px"> <ItemStyle Width="50px"></ItemStyle> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CharacterCount" DataType="System.Int32" FilterControlAltText="Filter CharacterCount column" HeaderText="Character Count" UniqueName="CharacterCount"> </telerik:GridBoundColumn> <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Delete" Text="Delete" UniqueName="Delete"> </telerik:GridButtonColumn> </Columns> <EditFormSettings> <EditColumn ButtonType="ImageButton"> </EditColumn> </EditFormSettings> </MasterTableView> <FilterMenu EnableImageSprites="False"> </FilterMenu> </telerik:RadGrid> </form> </body> </html> Imports Telerik.Web.UI Public Class _Default Inherits System.Web.UI.Page Public Property SourceFiles As List(Of SourceFile) Get Return Session("SourceFiles") End Get Set(value As List(Of SourceFile)) Session("SourceFiles") = value End Set End Property Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then Dim count As Byte = 0 Dim rnd As New Random Dim sfs As New List(Of SourceFile) While count < 10 Dim id As String = Guid.NewGuid.ToString sfs.Add(New SourceFile With {.DocumentId = id, .FileName = id, .CharacterCount = rnd.Next(0, Integer.MaxValue), .PageCount = rnd.Next(0, Integer.MaxValue), .WordCount = rnd.Next(0, Integer.MaxValue), .IsNew = True}) count = count + 1 End While SourceFiles = sfs RadGrid1.DataSource = SourceFiles RadGrid1.DataBind() Else Dim context As System.Web.HttpContext = System.Web.HttpContext.Current If context IsNot Nothing Then Dim page As System.Web.UI.Page = CType(context.Handler, System.Web.UI.Page) Telerik.Web.UI.RadAjaxManager.GetCurrent(page).ResponseScripts.Add(" newSourceFilesAdded = " & If(SourceFiles.Any, "true; ", "false; ")) End If End If End Sub Private Sub RadGrid1_NeedDataSource(sender As Object, e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource RadGrid1.DataSource = SourceFiles End Sub End Class Public Class SourceFile Public Property DocumentId As String Public Property FileName As String Public Property WordCount As Integer Public Property PageCount As Integer Public Property CharacterCount As Integer Public Property IsNew As Boolean End ClassAs i mentioned before, I have found a workaround by doing the following:
<ClientEvents OnCommand="RaiseCommand" />where the function itself has no code:
function RaiseCommand(sender, eventArgs) { //By adding this, it prevents onbeforeunload from firing as a redirect, //When Add New Record is clicked insead of + button. }Thanks,
Aash.