【问题标题】:ASP:Hidden field variable from code behind loses value on return from server inside update panelASP:来自代码后面的隐藏字段变量在更新面板内从服务器返回时丢失值
【发布时间】:2014-01-06 08:06:56
【问题描述】:

我有一个显示报告数据的自定义 Web 部件。它位于选项卡控件和更新面板中,因此刷新报告数据的回调是异步的。

在服务器上,我需要处理一些数据并发送回一个值以供以后使用。这个变量只需要坐在那里等待用户操作,然后客户端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可以在另一个用户生成的事件发生时使用它?

【问题讨论】:

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


    【解决方案1】:

    如果您丢失了隐藏字段值,那么最简单的方法是将其存储在任何 Session 值的 ViewState 中。

    在js中获取值可以为:

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

    【讨论】:

    • 感谢您抽出宝贵时间回复。我考虑过这一点,但我读到您不能使用 java 脚本提取会话对象的值。如果我错了,请告诉我,或者如果你有一个如何把它弄出来的例子,我将不胜感激。再次感谢!
    • 为什么需要从 javascript 中提取会话对象的值。您只需要在代码后面维护这个值吗?
    • 在js中获取值可以为:function GetSessionValue() { var sessionValue = ""; }
    • 维克兰特人。谢谢,我会试试这个并向你报告。要回答您的问题,为什么我需要使用 javascript 在客户端提取值 --- 原因是基于变量的值,我可能会或可能不会触发按钮单击事件并导致刷新。如果我从服务器上的 JSON 解析出来的值与客户端的当前值不匹配,我只想刷新。再次感谢您的意见和帮助。
    • 维克兰特。我修改了代码以获取该值,但它返回为空。也许它没有从 UpdatePanel 中脱颖而出? var mySessionVar = ('').toString; var getJSONString = jQuery.parseJSON(mySessionVar);警报(getJSONString);
    猜你喜欢
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2011-12-29
    • 2014-04-01
    相关资源
    最近更新 更多