我找到了我的问题的答案。我没有尝试直接从调用方法引用占位符,而是将占位符作为方法参数传递,然后从调用方法将其作为 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'