我有一个显示报告数据的自定义Web部件。它位于选项卡控件内,并位于更新面板内,因此用于刷新报表数据的回调是异步的。
在服务器上,我需要处理一些数据并发回一个值供以后使用。这个变量只需要在那里进行SIT并等待用户操作,然后客户端javascript将使用读取变量并根据变量的条件,这个javascript将以编程方式“点击”更新面板中的按钮。
<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>
处理数据的服务器代码并返回变量。我已经完成了无关的代码。
Protected Sub btnSendHiddenField_Click(sender As Object, e As EventArgs) Handles btnSendHiddenField.Click
Dim parsedObjectId As String = ""
parsedObjectId = "1000"
hiddenCurrentObjectId.Value = parsedObjectId
End Sub
在面板的OnUnload代码中。必须在那里或那里使其他东西在WebPart中工作。我借用了这个OnUnload代码来克服以前的问题。
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
隐藏字段中的值会在回程中消失。我认为它在OnUnload函数调用中被擦掉了。
我该怎么做才能保留这个隐藏的字段值,以便客户端javascript可以在另一个用户生成的事件发生时使用它?
答案 0 :(得分:1)
如果丢失隐藏字段值,则最简单的方法是将其存储在任何会话值的ViewState中。
您可以将js中的值设为:
function GetSessionValue()
{
var sessionValue = "<%=Session["ITEM"].ToString()%>";
}