asp.net webform 框架中的 UpdatePanel 不部分更新

问题描述 投票:0回答:1
  <asp:UpdatePanel runat="server" ID="adavanceGrpngLB_UP" UpdateMode="Conditional">
                                <ContentTemplate>
                                    <%--code[@**] 10-Nov-22 code changed Adding Search text box in Target Column Mapping Setting Popup code start--%>
                                    <asp:TextBox ID="search_advgrp" class="form-control form-control-sm mt-1  mr-1 adv_search_col" runat="server" AutoPostBack="false" OnTextChanged="searchFilterTextAdvancedgrp" placeholder="Search Column"></asp:TextBox>
                                    <asp:Button ID="clearListBoxAdvGrp" OnClick="clearSearchTextAdvancedgrp" title="Clear Search" runat="server" Text="x" class="Adv_clr_ser"></asp:Button>
                                    <%--code[@**]10-Nov-22 code changed Adding Search text box in Target Column Mapping Setting Popup code end --%>
                                    <asp:Button runat="server" ID="loadcol" OnClick="Load_advancegroupLB" Style="display: none" />
                                    <asp:ListBox runat="server" ID="adavanceGrpngLB" SelectionMode="Multiple" AutoPostBack="false" Style="max-width: 25em; min-width: 13em; margin-left: 2em; margin-right: .5em; max-height: 60em;"></asp:ListBox>
                                    <asp:Button runat="server" ID="Button3" OnClick="advancegroup_additem_Click" Style="position: absolute; margin-top: 1.1em;" Text=">>" />
                                    <asp:Button runat="server" ID="Button4" OnClick="advancegroup_removeitem_Click" Style="position: absolute; margin-top: 3.2em;" Text="<<" />
                                    <asp:ListBox runat="server" ID="ExadavanceGrpngLB" SelectionMode="Multiple" AutoPostBack="false" Style="max-width: 25em; min-width: 13em; width: 13em; margin-left: 3.1em; max-height: 60em;"></asp:ListBox>
                                    <span>
                                        <%-- <button type="button" id="Button5" runat="server" title="Rename this Rule." style="height: 2.2em !important" class="ml-1 fa fa-angle-double-up" ><i class="fas fa-edit"></i></button>
                                    <button type="button"  id="Button6" title="Delete this Rule." style="heighty: 2.2em !important" class="ml-1 mr-1 btn btn-sm btn-outline-secondary" ><i class="fas fa-trash-alt"></i></button>--%>
                                        <%--                  <asp:Button  runat="server" class="ml-1 fa fa-angle-double-up rotate" ID="group_up" OnClick ="advancegroup_moveup_Click" Text="<<" Style="position: absolute; margin-top: 1.1em;"/>
                                        <asp:Button  runat="server" class=" ml-1 fa fa-angle-double-down rotate" ID="group_down"  OnClick ="advancegroup_movedown_Click" Text=">>" Style="position: absolute; margin-top: 3.2em;"/>--%>
                                        <%--02 July22 code[@*] Button--%>
                                        <asp:Button runat="server" class="ml-1 fa fa-angle-double-up rotate" ID="group_up" OnClick="advancegroup_moveup_Click" Text="▲" Style="position: absolute; margin-top: 1.1em;" />
                                        <asp:Button runat="server" class=" ml-1 fa fa-angle-double-down rotate" ID="group_down" OnClick="advancegroup_movedown_Click" Text="▼" Style="position: absolute; margin-top: 3.2em;" />
                                    </span>
                                </ContentTemplate>                                   
                            </asp:UpdatePanel>
                        </div>**strong text**

实际上我正在使用asp.net webform框架。我的情况是,如果我在文本框中输入一个单词,它不会触发 OnTextChange 事件中的“searchFilterTextAdvancedgrp”。如果我更改 AutoPostBack = true ,它会触发该函数,但 Page_Load 也会触发,导致用户性能不佳。我想触发OnTextChange而不触发Page_Load函数。我是开发环境的新手,如果我犯了任何错误,请纠正我。提前致谢。以下代码块是我在 c# 中的 OnTextChange 事件代码块

 public void searchFilterTextAdvancedgrp(object sender, EventArgs e)
{
    string searchvalueadvgrp = (search_advgrp.Text).Trim(); //length > 0 --->clearSearchTextAdvancedgrp(null, null)
    string[] advgrplistBoxItems = new string[adavanceGrpngLB.Items.Count];
    WriteLog("***Advanced column length " + adavanceGrpngLB.Items.Count);
    WriteLog("Advanced column values" + adavanceGrpngLB.ToString());
    WriteLog(" **********List Items *********" + advgrplistBoxItems.ToString());

    //081123 code[****] - start get target side columns, assign to advancegrouparraylist
    for(int i =0; i< adavanceGrpngLB.Items.Count; i++)
    {
        advancedGroupingArrayList.Add(adavanceGrpngLB.Items[i].ToString());
    }
    //081123 code[****] - end get target side columns, assign to advancegrouparraylist

    //code[@**] 16-Nov-22 code changed clear the textbox value code start
    if (search_advgrp.Text.Length <= 0)
    {
        clearSearchTextAdvancedgrp(null, null);
        return;
    }
    //code[@**] 16-Nov-22 code changed clear the textbox value code end
    List<string> searchListAdv = new List<string>();
    WriteLog("Target Array List " + advancedGroupItems.ToString());
    // 081222 code[**] Ne need to Loop the Data Array List --
    foreach (var item in advancedGroupingArrayList)
    {
        WriteLog("Values " + item.ToString());
        if (item.ToString().ToLower().Contains(searchvalueadvgrp.ToLower())) searchListAdv.Add(item.ToString());
    }
   // --
    //advancedGroupingArrayList
     searchListAdv.Sort();
    foreach (var eachItems in searchListAdv)
    {
        WriteLog("each items values adv " + eachItems.ToString());
        adavanceGrpngLB.Items.Add(eachItems.ToString());
    }
    // Sort the ArrayList Directly --
    //advancedGroupingArrayList.Sort();

    adavanceGrpngLB.DataSource = searchListAdv;
    adavanceGrpngLB.DataBind();

    //--
    // Set the Tooltip After Search
    settooltipLB();//--
                   // 081222 end---
    hidejson.Update();
    WriteLog("===========" + searchListAdv.ToString());
    adavanceGrpngLB_UP.Update();      
}
c# asp.net webforms code-behind
1个回答
0
投票

请记住,使用更新面板并不阻止或意味着页面加载事件不会触发(它会触发)。请记住,使用更新面板时会发生完整的常规页面生命周期。

这里正确的术语是我们所说的部分页面回发。这仍然意味着页面加载事件,并且当更新面板中发生任何回发时,整个页面生命周期仍然运行。看起来可能没有发生页面回发,但它们确实发生了!!!

当然,当使用更新面板时,只有更新面板区域内的控件可以通过代码隐藏进行更新。这里的想法是,您可以减少页面回发的大小,因为只有页面的那部分被发送到服务器,然后返回到客户端。

因此,虽然此类带有更新面板的回发仅回发网页的一部分,但标准页面事件(例如页面加载事件)每次都会运行。

但是,每次单击简单的按钮时,页面加载事件总是会运行。这意味着您运行来设置网页的设置代码、数据加载代码和类型代码?

我可以而且经常应该被放置在页面加载事件中,但是您需要测试该页面是否真的是第一个页面加载。

因此,99%,或者实际上是我在 asp.net webforms 中构建的最后 200 个网页?

每个人都有这个:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid
    End If

End Sub

Sub LoadGrid()

    GVHotels.DataSource = MyRst("SELECT * FROM tblHotelsA
                                ORDER BY HotelName")
    GVHotels.DataBind()

End Sub

因此,请注意我们如何将页面加载代码事件编写为仅运行一次,并且仅在第一次实际页面加载时运行。作为一般规则,您不能重新加载网格,甚至不能重新加载简单的组合框,因为如果每次重新加载此类数据,那么这些控件的用户选择将丢失。

请记住,对于任何按钮单击或任何控件上的自动发布,首先触发页面加载事件,然后触发控件事件代码存根。

因此,如果页面加载事件中没有所有重要的 If Not IsPostBack 代码存根,则几乎不可能构建一个工作网页。

无论您是否使用更新面板,此建议都适用。

但是,如上所示,回发时的更新面板将首先触发页面加载,然后触发自动回发的代码存根。按理说,在构建页面时,几乎所有情况下的页面加载事件代码都需要放置在 htat If Not IsPostBack 存根内,这适用于您构建的几乎每个页面 - 不仅仅是带有 udpate 面板的页面。

© www.soinside.com 2019 - 2024. All rights reserved.