ASP:来自代码的隐藏字段变量在从更新面板内的服务器返回时丢失值

时间:2013-12-18 08:37:15

标签: javascript jquery asp.net updatepanel hidden-field

我有一个显示报告数据的自定义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代码来克服以前的问题。

我的ONLOLOAD FUNCTION

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可以在另一个用户生成的事件发生时使用它?

1 个答案:

答案 0 :(得分:1)

如果丢失隐藏字段值,则最简单的方法是将其存储在任何会话值的ViewState中。

您可以将js中的值设为:

function GetSessionValue()
{
   var sessionValue = "<%=Session["ITEM"].ToString()%>";
}