Reputation: 93
I have a custom webpart that displays report data. It lives inside a tab control, and inside an update panel so the call back to refresh the report data is async.
On the server, I need to process some data and send back a value for later use. This variable just needs to SIT there and wait for user action, and then a client side javascript will use read the variable and based on the condition of the variable, this javascript will programmatically "click" the button in the update panel.
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnUnload="UpdatePanel_Unload">
<ContentTemplate>
<asp:Button ID="btnSendHiddenField" runat="server" style="visibility: hidden; display: none;" OnClick="btnSendHiddenField_Click"/>
<rsweb:ReportViewer ID="ReportViewer1" runat="server"
Font-Names="Verdana" Font-Size="8pt" Height="383px"
InteractiveDeviceInfos="(Collection)" ProcessingMode="Remote"
WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="757px"
SizeToReportContent="True">
</rsweb:ReportViewer>
<asp:HiddenField ID= "hiddenCurrentObjectId" runat="server"/>
</ContentTemplate>
</asp:UpdatePanel>
THE SERVER CODE THAT PROCESSES THE DATA AND SENDS BACK THE VARIABLE. I HAVE OMITTED THE UNRELATED CODE.
Protected Sub btnSendHiddenField_Click(sender As Object, e As EventArgs) Handles btnSendHiddenField.Click
Dim parsedObjectId As String = ""
parsedObjectId = "1000"
hiddenCurrentObjectId.Value = parsedObjectId
End Sub
In my OnUnload code for the panel. Which has to be there or there to make some other things work in the WebPart. I borrowed this OnUnload code to overcome a previous issue.
Protected Sub UpdatePanel_Unload(sender As Object, e As EventArgs)
Dim methodInfo As MethodInfo = GetType(ScriptManager).GetMethods(BindingFlags.NonPublic Or BindingFlags.Instance).Where(Function(i) i.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")).First()
methodInfo.Invoke(ScriptManager.GetCurrent(Page), New Object() {TryCast(sender, UpdatePanel)})
End Sub
End Class
The value from the hidden field gets wiped out on the return trip. I think it is getting wiped on the OnUnload function call.
What can I do to preserve this hidden field value so the client side javascript can use it when another user generated event occurs?
Upvotes: 0
Views: 1036
Reputation: 120
If you are lossing the hidden field value then simplest way it to store it in a ViewState of any Session value.
You can get the value in js as:
function GetSessionValue()
{
var sessionValue = "<%=Session["ITEM"].ToString()%>";
}
Upvotes: 1