【问题标题】:updatepanel works once then submits the page (asp.net c#)updatepanel 工作一次然后提交页面(asp.net c#)
【发布时间】:2012-03-19 16:44:40
【问题描述】:

我有一个更新面板,在单击一个按钮后提交页面。代码是

<asp:ScriptManager ID="MainScriptManager" runat="server" EnablePageMethods="true" />

<asp:UpdatePanel ID="pnlCalendar" runat="server">
    <ContentTemplate>
        <asp:PlaceHolder ID="panCalendarHolder" runat="server"></asp:PlaceHolder>
        <br /><br />
        <asp:Button id="btnViewWholeWeek" text="View Whole Week" runat="server" CssClass="normal-button" OnClick="viewWholeWeek" CausesValidation="false"></asp:Button>
    </ContentTemplate>   
</asp:UpdatePanel>

印刷机上的功能不包含任何代码,因为我一直在测试它是否会导致问题。反正就是这样

protected void viewWholeWeek(object sender, EventArgs e) {  
    HtmlContainerControl paraDayName = (HtmlContainerControl)new HtmlGenericControl("p");
    paraDayName.InnerHtml = "test";
    panCalendarHolder.Controls.Add(paraDayName); 
}

我按下上面的按钮一次......它工作 - 刷新更新面板。我再次按下它并提交页面。我在&lt;form id="frmMain" runat="server"&gt;&lt;/form&gt; 标签内拥有所有内容....

有什么想法吗?!

【问题讨论】:

  • submits the page 是什么意思?每次回发都会提交页面,甚至是异步的。您是否知道最迟需要在 page_load 中手动重新创建每个回发的每个动态创建的控件?否则不会重新创建。
  • 第一次点击按钮执行异步,然后第二次点击它,提交整个页面。即:不是更新面板。这些按钮不是动态创建的——它们是在标准 HTML 中。

标签: c# asp.net updatepanel


【解决方案1】:

我试过你的代码,完全没有问题......也许你能告诉我们更多细节!你在Page_load函数中做了什么?

【讨论】:

  • 我接受这个作为答案仅仅是因为它促使我​​查看 page_load 中的代码。如果没有设置变量,我正在做一些强制重定向的技巧。 IsPostBack 进行救援。
  • 我认为 IsPostBack 是几乎所有页面的必备属性 :) 很高兴我的简单评论对您有所帮助
【解决方案2】:

在您的更新面板类中尝试使用updateMode = Conditional。如您所知,默认情况下它的值是 Always。

【讨论】:

    【解决方案3】:

    这是通过添加此样板代码修复的一些常见错误:

    private void EnsureUpdatePanelFixups()
    {
        if (this.Page.Form != null)
        {
            string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"];
    
            if (formOnSubmitAtt == "return _spFormOnSubmitWrapper();")
            {
                this.Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();";
            }
        }
    
        ScriptManager.RegisterStartupScript(this, typeof(ThisClassTypeGoesHere), "SomeStringToBeTheKey", "_spOriginalFormAction = document.forms[0].action;_spSuppressFormOnSubmitWrapper=true;", true);
    }
    

    确保每次回发都会调用它。我是从同事那里得到的,所以我无法找到来源,抱歉。

    【讨论】:

    • 我实际上只在 SharePoint 上工作过,而不仅仅是 ASP,所以可能。
    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2013-09-12
    相关资源
    最近更新 更多