我的Asp.Net页面回发似乎在页面重置之前有固定数量的回发

问题描述 投票:0回答:1

--- 我的问题的背景:---

我正在 VS 2022 中进行测试,并使用 IIS Express (Chrome) 启动网站。在 UpdatePanel 内的 AutoPostBack=true 组合框中连续选择 10 多个项目后,页面会在成功处理其中 9 个后重置。我所说的重置是指在 Page_PreLoad 时,一切正常,但 ViewState 为空,并且对于完全相同的页面和完全相同的逻辑,不再实例化控件。

问题是在正常执行期间发现的,但它需要更多的体操才能重现,因此我将测试限制在该组合框上,并在回调方法中添加了 3 秒的线程睡眠来模拟。无论回调休眠多长时间,它总是在 9 点后停止工作。

--- 问题: ---

使用 ajax 或 IIS Express 或 IIS 或任何其他可以执行我描述的操作的链接回发数量是否有某种限制?

网上搜了一下,发现都不适用;视图状态大小不会增长,非常小,为 128 字节,池中可用线程数和最大线程数不会减少超过 1,请求的大小很好。

--- 布局和代码: ---

我们有一个带有面板的页面,该面板创建用户控件实例的列表,其中包含各种 PageView 中的各种控件,每个实例仅显示一个 PageView,并且面板中只有一个实例出现问题。这不是构建用户控件的最佳方法,但我按原样继承了该网站。

不幸的是,我无法发布正式代码,但我会尝试提供尽可能多的代码来说明控件的上下文。

****** The user Control ******

我只保留了问题的页面视图,因为其他问题不相关。

    <%@ Control Language="C#" AutoEventWireup="true" %>
    <td class='<%# TdClass %>'>
        <telerik:RadPageView ID="PV1 runat="server">
            some controls
        </telerik:RadMultiPage>
        <telerik:RadPageView ID="PV2 runat="server">
            some controls
        </telerik:RadMultiPage>

        <telerik:RadPageView ID="PV3" runat="server">
            <div style="width: 75px; float: left;"> 
                <asp:UpdatePanel ID="UP1" runat="server" >
                    <ContentTemplate>
                        <telerik:RadSearchBox ID="Combo1" runat="server" Width="100%" DataTextField="Descr"
                            DataValueField="Id" ZIndex="7001" EmptyMessage="- nom -" ShowSelectItem="true"
                            SelectItemText="" ExpandAnimation-Type="None" CollapseAnimation-Type="None"
                            AutoPostBack="true" OnSelectedIndexChanged="Combo1_SelectedIndexChanged" >
                        </stm:STMRadSearchBox>
                    </ContentTemplate>
                </asp:UpdatePanel>
           </div>
        </telerik:RadPageView>
    </telerik:RadMultiPage>
    </td>
        protected void Combo1_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
        {
            Thread.Sleep(3000);
        }
****** The panel creating a List of UserControl ******
    <%@ Control Language="C#" AutoEventWireup="true" %>
    <telerik:RadAjaxPanel ID="IIRAP" runat="server">
    <div class="Content">
        <span id="tata"></span>
        <telerik:RadListView ID="LVI" runat="server" GroupItemCount="3" OnNeedDataSource="LVI_NeedDataSource"
            OnItemCreated="LVI_ItemCreated" OnPreRender="LVI_PreRender" Visible="<%# CanViewIntervenant %>">
            <LayoutTemplate>
                <table>
                    <tr id="groupPlaceholder" runat="server">
                    </tr>
                </table>
            </LayoutTemplate>
            <GroupTemplate>
                <tr>
                    <uc:ICTL ID="itemPlaceholder" runat="server" />
                </tr>
            </GroupTemplate>
            <ItemTemplate>
                <uc:ICTL ID="ICTL1" runat="server" />
            </ItemTemplate>
            <EmptyItemTemplate>
                <th>
                    &nbsp;</td>
                    <td>
                        &nbsp;
                    </td>
            </EmptyItemTemplate>
        </telerik:RadListView>
    </div>
    </telerik:RadAjaxPanel>
****** The page using the panel ******
    <%@ Page Language="C#"  %>
    <%@ Register Src="~/UserControl/Detail.ascx" TagPrefix="uc" TagName="Detail" %>
    <asp:Content ID="Content2" ContentPlaceHolderID="MC" runat="server" style="height: 100%">
    <div id="divPageContent">
        <asp:ValidationSummary ID="ValidationSummarySave" runat="server" ValidationGroup="Save" CssClass="errorSummary" Style="margin-top: 30px;" />
        <telerik:RadPanelBar ID="PD1" runat="server" Width="100%" ExpandMode="MultipleExpandedItems">
            <Items>
                <telerik:RadPanelItem Value='<%# RadPanelItemValue.Intervenants.ToString() %>' Text="Intervenants"
                    Expanded="true">
                    <Items>
                        <telerik:RadPanelItem>
                            <ItemTemplate>
                                <uc:DetailID="II1" runat="server" />
                            </ItemTemplate>
                        </telerik:RadPanelItem>
                    </Items>
                </telerik:RadPanelItem>
            </Items>
        </telerik:RadPanelBar>
    </div>
   </asp:Content>
asp.net ajax iis telerik
1个回答
0
投票

感谢大家的投入。使我的想法朝着正确方向发展的事实是,回发必须在发送另一个回发之前完成。我之前探索过这个想法,但没有找到解决方案,这很奇怪,因为我一定不是第一个遇到此类问题的人。我确信它就在那里,只是由于某些原因从未偶然发现它。一个有效的解决方案来自一个意想不到的来源,即所有地方的 chatGPT。以防万一它可能对其他人有帮助,尽管我怀疑那里有更好的解决方案,因为这似乎是处理这个问题的一种尴尬方法,但这里是:

        <script type="text/javascript">
            var _requestsAdded = false;
            function pageLoad() {
                if (_requestsAdded == false) {
                    var prm = Sys.WebForms.PageRequestManager.getInstance();
                    prm.add_beginRequest(BeginRequestHandler);
                    prm.add_endRequest(EndRequestHandler);
                    _requestsAdded = true;
                }
            }
            function BeginRequestHandler(sender, args) {
                //Start of PostBack.
                var element= document.getElementById('<%= serverSideControl.ClientID %>');
                element.control._enabled = false
            }

            function EndRequestHandler(sender, args) {
                //end of postback
            }
        </script>
© www.soinside.com 2019 - 2024. All rights reserved.