代码之家  ›  专栏  ›  技术社区  ›  João Mendes

单击面板导致异步回发,但单击子项导致整页回发

  •  1
  • João Mendes  · 技术社区  · 7 年前

    我有以下ascx控件:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CalendarDay.ascx.cs" 
        Inherits="MVP.Calendar.CalendarDay" %>
    
    <asp:Panel ID="DayWrapper" runat="server" 
        CssClass="day col p-2 border border-left-0 border-top-0 text-truncate">
        <div class="date d-flex align-items-center justify-content-center <%= CurrentDayTag %>">
            <%= DayText %>
        </div>
        <div class="row pl-3 pr-3 d-none d-sm-block">
            <p class="info"><%= InfoText %></p>
            <a class="d-block rounded small align-self-start" title="Test 1"><%= PriceText %></a>
        </div>
    </asp:Panel>
    

    下面是其代码的一部分:

    public partial class CalendarDay : UserControl, IPostBackEventHandler
    {
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
    
            DayWrapper.CssClass += DayBackgroundTag;
            DayWrapper.Attributes["onclick"] = "javascript:__doPostBack('" + UniqueID + "', '')";
        }
    
        void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
        {
            OnDayClicked();
        }
    }
    

    下面是呈现的DOM:

    <div id="MainContent_CalDate_WeekRepeater_DayRepeater_3_CalendarDay_1_DayWrapper_1"
        class="day col p-2 border border-left-0 border-top-0 text-truncate day--fully-available"
        onclick="javascript:__doPostBack('ctl00$MainContent$CalDate$WeekRepeater$ctl03$DayRepeater$ctl01$CalendarDay', '')">
        <div class="date d-flex align-items-center justify-content-center ">17</div>
        <div class="row pl-3 pr-3 d-none d-sm-block">
            <p class="info"></p>
            <a class="d-block rounded small align-self-start" title="Test 1">10€</a>
        </div>
    </div>
    

    这个ascx控件位于一个相当复杂的层次结构中,但最终,所有这些都位于 UpdatePanel .

    在呈现的HTML上,如果我单击17或10_ 更新面板 . 两个 这些呼叫正在触发 RaisePostBackEvent 功能正常。

    我希望每次都能得到Ajax调用。

    为什么会发生这种情况,我该如何解决?

    1 回复  |  直到 7 年前
        1
  •  1
  •   dana    7 年前

    DayWrapper.Attributes["onclick"] = "javascript:__doPostBack('" + UniqueID + "', '')";
    

    DayWrapper.Attributes["onclick"] = Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this));
    ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(this);
    

    RegisterAsyncPostBackControl ScriptManager

    推荐文章