Search code examples
asp.netasp.net-placeholder

Accessing an asp:Placeholder from a public shared sub


I am currently developing a solution that uses YUI grids. My problem is that my home page is a summary of all my other pages, it includes a summary grid of the grids displayed on other pages, and I dont want to reuse the same code in each page's code behind. Im trying to centralize it. So what I have done is I have made <asp:Placeholders id="LoadOpenPurchasesGridDataPlaceholder" runat="server"> where I write a JSON string into, on the home page and the Open Purchases Page. However, because I want to share the sub procedure across all pages, I have made it public shared, but it gives an error: cannot refer to an instance member of a class from within a shared method or shared member.

Now if I want to response.write to a page from a different code begind I use HttpContext.Current.Response.Write(). Is there a similar way of accessing the page's HTML controls from where I am calling it. (I have tried to explain it in detail, sorry for confusion caused.)

My Code:

Shared Sub LoadOpenPurchasesGrid(ByVal Location As String, ByVal Coop As String, ByVal Commodity As String, ByVal Financed As String, ByVal Season As String, ByVal Trader As String, ByVal Department As String, ByVal Database As String)
    Try
        Dim ReturnString As String = Nothing
        If Location = "0" And Coop = "0" And Commodity = "0" And Season = "0" And Trader = "0" Then
             ReturnString = (LoadOpenPurchasesGridData("", "", "", "", "", Department, Database))
             Dim LoadGridDataContainer As New HtmlGenericControl("input")
             LoadGridDataContainer.ID = "hdnOpenPurchasesGridData"
             LoadGridDataContainer.Attributes.Add("type", "hidden")
             LoadGridDataContainer.Attributes.Add("value", ReturnString)
             LoadOpenPurchasesGridDataPlaceholder.Controls.Add(LoadGridDataContainer)
        Else
             ReturnString = (LoadOpenPurchasesGridData(Location, Coop, Commodity, Season, Trader, Department, Database))
             HttpContext.Current.Response.Write(ReturnString)
        End If
        HttpContext.Current.Response.Write(ex.message)
    End Try
End Sub


Solution

  • I have found the answer to my question. Instead of trying to reference the placeholder directly from the calling method, I rather pass the placeholder as a method parameter, and I send it from the calling method as Me.PlaceholderID.

    ' Public Shared Sub LoadOpenPurchasesGridData(ByRef Placeholder As Object, ByVal Location As String, ByVal Coop As String, ByVal Commodity As String, ByVal Season As String, ByVal Trader As String, ByVal SearchCriteria As String, ByVal Department As String, ByVal Database As String, ByVal InitialLoad As Boolean)
            Dim SqlConnection As New SqlConnection
            Dim SqlCommand As New SqlCommand
            Dim SqlParameter As New List(Of SqlParameter)
            Dim SqlReader As SqlDataReader = Nothing
            Dim ReturnString = "["
            Dim Counter As Integer = 1
            Try
                SqlConnection = CreateDatabaseConnection(ConnectionString)
                AddSqlParameterToCollection(SqlParameter, "@Location", Location)
                AddSqlParameterToCollection(SqlParameter, "@Coop", Coop)
                AddSqlParameterToCollection(SqlParameter, "@Commodity", Commodity)
                AddSqlParameterToCollection(SqlParameter, "@Season", Season)
                AddSqlParameterToCollection(SqlParameter, "@Trader", Trader)
                AddSqlParameterToCollection(SqlParameter, "@Search", SearchCriteria)
                AddSqlParameterToCollection(SqlParameter, "@Database", Database)
                SqlCommand = CreateSqlCommand("[proc_Dynamic_GetPOC]", SqlConnection, SqlParameter)
                SqlReader = SqlCommand.ExecuteReader()
                If SqlReader.HasRows Then
                    Do While SqlReader.Read And Counter < 200
                        If Counter <> 1 Then
                            ReturnString += ","
                        End If
                        ReturnString += "{""PrimCont"":""" & SqlReader("PrimCont") & ""","
                        ReturnString += """PSCM_COOP_ID"":""" & SqlReader("PSCM_COOP_ID") & ""","
                        ReturnString += """POCNumber"":""" & SqlReader("POCNumber") & ""","
                        ReturnString += """VENDORID"":""" & SqlReader("VENDORID") & ""","
                        ReturnString += """VendorContract"":""" & SqlReader("VendorContract") & ""","
                        ReturnString += """ITMCLSDC"":""" & SqlReader("ITMCLSDC") & ""","
                        ReturnString += """CommodityGrade"":""" & SqlReader("CommodityGrade") & ""","
                        ReturnString += """ContractQty"":""" & SqlReader("ContractQty") & ""","
                        ReturnString += """LIQty"":""" & SqlReader("LIQty") & ""","
                        ReturnString += """TonsNotFinalized"":""" & SqlReader("TonsNotFinalized") & ""","
                        ReturnString += """POC_DEL_QTY"":""" & SqlReader("POC_DEL_QTY") & ""","
                        ReturnString += """OpenQty"":""" & SqlReader("OpenQty") & ""","
                        ReturnString += """ContractPrice"":""" & SqlReader("ContractPrice") & ""","
                        ReturnString += """PurchaseBasis"":""" & SqlReader("PurchaseBasis") & ""","
                        ReturnString += """Safex Month"":""" & SqlReader("Safex Month") & ""","
                        ReturnString += """SpreadToSafexMonth"":""" & SqlReader("SpreadToSafexMonth") & ""","
                        ReturnString += """LOCNDSCR"":""" & SqlReader("LOCNDSCR") & ""","
                        ReturnString += """Area"":""" & SqlReader("Area") & ""","
                        ReturnString += """VesselName"":""" & SqlReader("VesselName") & ""","
                        ReturnString += """DeliveryMonth"":""" & SqlReader("DeliveryMonth") & ""","
                        ReturnString += """SignedContract"":""" & SqlReader("SignedContract") & """}"
                        Counter += 1
                    Loop
                End If
                ReturnString += "]"
                Counter = 0
                If InitialLoad = True Then
                    Dim LoadGridDataContainer As New HtmlGenericControl("input")
                    LoadGridDataContainer.ID = "hdnOpenPurchasesGridData"
                    LoadGridDataContainer.Attributes.Add("type", "hidden")
                    LoadGridDataContainer.Attributes.Add("value", ReturnString)
                    Placeholder.Controls.Add(LoadGridDataContainer)
                Else
                    HttpContext.Current.Response.Write(ReturnString)
                End If
            Catch ex As Exception
                HttpContext.Current.Response.Write("<span class=""error_message_span"">ERROR - An error occurred loading the open puchases grid. Please contact the system administrators for assistance.</span>" & ex.Message)
            Finally
                If Not IsNothing(SqlReader) Then
                    SqlReader.Close()
                    SqlReader = Nothing
                End If
                If Not IsNothing(SqlCommand) Then
                    SqlCommand.Dispose()
                    SqlCommand = Nothing
                End If
                If Not IsNothing(SqlConnection) Then
                    SqlConnection.Close()
                    SqlConnection.Dispose()
                    SqlConnection = Nothing
                End If
            End Try
        End Sub'