ArcGIS_AddDynamicData_VBNet\App_Code\Utility.vb
' Copyright 2011 ESRI ' ' All rights reserved under the copyright laws of the United States ' and applicable international laws, treaties, and conventions. ' ' You may freely redistribute and use this sample code, with or ' without modification, provided you include the original copyright ' notice and use restrictions. ' ' See the use restrictions. ' Imports Microsoft.VisualBasic Imports System Public Class Utility ' Constructs a callback result that will display an error message based on the passed-in ' exception Public Shared Function GetErrorCallback(ByVal exception As System.Exception) As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult ' Create a callback result to display an error message Dim jsAlertErrorMessage As String = GetJavaScriptErrorString(exception) Dim alertCallbackResult As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult = ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult.CreateJavaScript(jsAlertErrorMessage) Return alertCallbackResult End Function ' Constructs JavaScript necessary to display an error message based on the passed-in exception. Public Shared Function GetJavaScriptErrorString(ByVal exception As System.Exception) As String ' Get the website's configuration file Dim webConfig As System.Configuration.Configuration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.HttpContext.Current.Request.ApplicationPath) ' Get the "compilation" section of the config file Dim compilationSection As System.Web.Configuration.CompilationSection = TryCast(webConfig.GetSection("system.web/compilation"), System.Web.Configuration.CompilationSection) ' If the config file's compilation section specifies debug mode, include ' stack trace information in the error message. Otherwise, just return ' the exception message. Dim errorMessage As String = Nothing If (Not compilationSection Is Nothing) AndAlso (compilationSection.Debug) Then Dim stackTrace As String = exception.StackTrace.Replace("\", "\\") stackTrace = stackTrace.Replace(Constants.vbLf, "\n") stackTrace = stackTrace.Replace(Constants.vbCr, "\r") stackTrace = stackTrace.Replace("'", "\'") errorMessage = exception.Message.Replace("\", "\\") errorMessage = errorMessage.Replace(Constants.vbLf, "\n") errorMessage = errorMessage.Replace(Constants.vbCr, "\r") errorMessage = errorMessage.Replace("'", "\'") errorMessage = errorMessage & "\n\n" & stackTrace.Trim() Else errorMessage = exception.Message End If ' Create a callback result to display an error message Dim jsAlertException As String = "alert('" & errorMessage & "')" Return jsAlertException End Function Public Shared Function CreateErrorCallback(ByVal message As String) As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection ' Create a string containing the JavaScript necessary to display an alert with the passed-in ' message as text Dim jsAlertException As String = "alert('" & message & "')" ' Create a callback result encapsulating the JavaScript Dim alertCallbackResult As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult = ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult.CreateJavaScript(jsAlertException) ' Create a Web ADF CallbackResultCollection and add the callback results created above to it Dim callbackResultCollection As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection = New ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection() callbackResultCollection.Add(alertCallbackResult) Return callbackResultCollection End Function Public Shared Function GetPostBackControl(ByVal page As System.Web.UI.Page) As System.Web.UI.Control Dim postBackControlID As String = Nothing If page.IsCallback Then postBackControlID = page.Request.Params("__CALLBACKID") Else Dim scriptManager As System.Web.UI.ScriptManager = System.Web.UI.ScriptManager.GetCurrent(page) postBackControlID = scriptManager.AsyncPostBackSourceElementID End If Return FindControl(postBackControlID, page) End Function Friend Shared Function FindControl(ByVal controlID As String, ByVal page As System.Web.UI.Page) As System.Web.UI.Control ' Make sure the passed-in page and control are not null If page Is Nothing OrElse controlID Is Nothing Then Return Nothing End If ' Try getting a reference to the control being sought via the page's FindControl function Dim webControl As System.Web.UI.Control = page.FindControl(controlID) ' Check whether the control was found If webControl Is Nothing Then ' Call method to traverse the Page's controls and find the unique id of the control ' having the passed in control ID Dim uniqueControlID As String = GetControlUniqueID(controlID, page.Controls) If Not uniqueControlID Is Nothing Then webControl = page.FindControl(uniqueControlID) Else webControl = page.FindControl(controlID) End If End If Return webControl End Function Friend Shared Function GetControlUniqueID(ByVal controlID As String, ByVal controls As System.Web.UI.ControlCollection) As String ' Declare a Control object to store references to controls in the passed-in ControlCollection Dim control As System.Web.UI.Control ' Declare a string variable to store references to the UniqueIDs of controls in the passed-in ' collection Dim uniqueID As String = Nothing ' Iterate through the controls in the passed-in collection Dim i As Integer = 0 Do While i < controls.Count ' Get a reference to the current control control = controls(i) ' Check whether the current control's ID matches the passed in control ID If control.ID = controlID Then ' The control's ID matches, so get a reference to its UniqueID and exit the loop uniqueID = control.UniqueID Exit Do End If ' Check whether the current control contains any child controls If control.Controls.Count > 0 Then ' Recursively call GetControlUniqueID with the passed-in control ID and the current ' control's collection of child controls uniqueID = GetControlUniqueID(controlID, control.Controls) ' Check whether the ID was found. If so, exit the loop If Not uniqueID Is Nothing Then Exit Do End If End If i += 1 Loop Return uniqueID End Function End Class