Asp.net 问题-更新面板中的任何隐藏字段都无法更新

Asp.net 问题-更新面板中的任何隐藏字段都无法更新,asp.net,Asp.net,我正在使用C#进行编程 我面临的问题是,我的隐藏变量值在更新面板中时并没有被更新。请参阅以下aspx代码: <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:Timer ID="Timer1" runat="server" Interval="10000" OnTick="Timer1_Tick"> </asp:T

我正在使用C#进行编程

我面临的问题是,我的隐藏变量值在更新面板中时并没有被更新。请参阅以下aspx代码:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <asp:Timer ID="Timer1" runat="server" Interval="10000" OnTick="Timer1_Tick">
        </asp:Timer>
        <input type="hidden" runat="server" id="hidCurrentDate" value="" />
        <input type="hidden" runat="server" id="hidTripIds" value="" />
        <input type="hidden" runat="server" id="hidTripDetails" value="" />

<asp:UpdateProgress ID="uprogTrips" runat="server">
            <ProgressTemplate>
                <span style="display: block; text-align: center">
                    <p style="font-family: Verdana; font-size: larger; font-weight: bold;">
                        <img src="../../Images/ajax-loader.gif" alt="Processing..." /><br />
                        <br />
                        Processing...</p>
                </span>
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always">
            <ContentTemplate>
                <asp:GridView ID="gvAllTrips" runat="server" OnRowDataBound="gvAllTrips_RowDataBound"
                    OnPageIndexChanging="gvAllTrips_PageIndexChanging" AllowPaging="true" AutoGenerateColumns="false">
                    <PagerSettings Mode="NumericFirstLast" PageButtonCount="35" Position="TopAndBottom" />
                    <PagerStyle CssClass="GridPager" />                    
                </asp:GridView>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                <asp:AsyncPostBackTrigger ControlID="ddSortBy" EventName="SelectedIndexChanged" />
                <asp:AsyncPostBackTrigger ControlID="ddFilterBy" EventName="SelectedIndexChanged" />
                <asp:AsyncPostBackTrigger ControlID="cbPageOptions" EventName="CheckedChanged" />
            </Triggers>
</asp:UpdatePanel>



处理

下面是我试图用CS代码更新其中一个隐藏字段的代码

有趣的是,当我试图调试它时,它显示了所有的值,但是当我在源代码页面上看到它时,它没有给出任何值

这是我的aspx.cs代码:

protected void Timer1_Tick(object sender, EventArgs e)
{
    DataTable dtTrips = null;
    WEX.Prototype.Data.TripDA tripDA = new WEX.Prototype.Data.TripDA();
    string tID = hidTripIds.Value;
    string[] tripIDs = new string[1000];
    tripIDs = tID.Split(',');


    foreach (string tripID in tripIDs)
    {
        TripSummaryBO tripSummaryBO = tripDA.getTripSummary(Convert.ToInt32(tripID));
        if (tripSummaryBO.tripLastEditedOnDate > Convert.ToDateTime(hidCurrentDate.Value))
        {

            WEX.Prototype.Service.WSProxies WSProxies = new WEX.Prototype.Service.WSProxies();
            dtTrips = WSProxies.Build();
            Session["AllTrips"] = dtTrips;
            dtTrips = (DataTable)Session["AllTrips"];
            if (dtTrips != null)
            {
                if (cnt==0)
                {
                    hidTripDetails.Value = ("Trip name-" + tripSummaryBO.tripName + " was modified by user " + tripSummaryBO.tripLastEditedBy);
                }
                else
                {
                    hidTripDetails.Value = hidTripDetails.Value + " <br/> " + ("Trip name-" + tripSummaryBO.tripName + " was modified by user " + tripSummaryBO.tripLastEditedBy);
                }
                BuildGridViewControl(dtTrips);
                cnt = cnt + 1;
            }
        }
        else
        {
            //upTripsGrid.Triggers.Clear();
            PageInit();
        }            
    }
}
protectedvoid Timer1\u Tick(对象发送方,事件参数e)
{
数据表dtTrips=null;
WEX.Prototype.Data.TripDA TripDA=新的WEX.Prototype.Data.TripDA();
字符串tID=hidTripIds.Value;
字符串[]TripID=新字符串[1000];
tripIDs=tID.Split(',');
foreach(tripID中的字符串tripID)
{
TripSummaryBO TripSummaryBO=tripDA.getTripSummary(Convert.ToInt32(tripID));
if(tripSummaryBO.TripLastedEditonDate>Convert.ToDateTime(hidCurrentDate.Value))
{
WEX.Prototype.Service.WSProxies WSProxies=新的WEX.Prototype.Service.WSProxies();
dtTrips=WSProxies.Build();
会话[“所有行程”]=数据行程;
dtTrips=(数据表)会话[“所有TRIPS”];
if(dtTrips!=null)
{
如果(cnt==0)
{
hidTripDetails.Value=(“Trip名称-”+tripSummaryBO.tripName+”已由用户“+tripSummaryBO.TripLastedEdBy”修改);
}
其他的
{
hidTripDetails.Value=hidTripDetails.Value+“
”+(“行程名称-“+tripSummaryBO.tripName+”已由用户“+tripSummaryBO.TripLastedEdBy”修改); } BuildGridViewControl(dtTrips); cnt=cnt+1; } } 其他的 { //upTripsGrid.Triggers.Clear(); PageInit(); } } }
请建议


谢谢。

您的隐藏输入字段不在更新面板控件内。任何到服务器的异步往返都只会导致
UpdatePanel
本身中的控件在UI上更新,因此即使后台代码运行并更新隐藏字段,在前端它们仍然保持不变,因为它们位于面板之外

尝试移动
标记中的隐藏字段:

<asp:UpdatePanel ID="upTripsGrid" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <input type="hidden" runat="server" id="hidCurrentDate" value="" />
        <input type="hidden" runat="server" id="hidTripIds" value="" />
        <input type="hidden" runat="server" id="hidTripDetails" value="" />
        ....
    </ContentTemplate>
</asp:UpdatePanel>

....

好东西。请注意,如果要动态添加hiddenField,则需要ContentTemplateContainer:updatePanel.ContentTemplateContainer.Controls.add(hiddenFieldX);稍后使用:panel.ContentTemplateContainer.Controls.OfType().First()查找它;