UpdatePanel中的转发器仅在第二次提交按钮后更新

时间:2012-05-31 19:46:40

标签: c# updatepanel repeater asp.net-4.0

我在UpdatePanel中有一个转发器,当我添加一些文本并提交一个按钮时,更新不会立即显示,而是仅在我第二次提交按钮后。

有关为何发生这种情况的任何想法?

感谢。

 <asp:UpdatePanel ID="updateStatus" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            <table border="">
                <tbody>
                <asp:TextBox Width="520" Height="35" style="font-size:13px;padding-left:0px;padding-right:0px;" id="txtStatusUpdate" runat="server"></asp:TextBox>
                <asp:UpdatePanel ID="updButton" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:Button style="font-size:25px;padding-left:0px;padding-right:0px;" ID="btnAddStatus" runat="server" Text="Add" OnClick="btnAddStatus_Click" />
                    </ContentTemplate>
                </asp:UpdatePanel>
                <asp:Repeater ID="repFilter" runat="server">
                    <ItemTemplate>
                        <tr>
                            <td class="date"><%# String.Format("{0:MM/dd/yyy}", ((Alert)Container.DataItem).CreateDate) %></td>
                            <td><%# ((Alert)Container.DataItem).Message  %></td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
                </tbody>
            </table>
        </ContentTemplate>      
        </asp:UpdatePanel>



protected void Page_Load(object sender, EventArgs e)
{

            _presenter = new RespondentProfilePresenter();
            _presenter.Init(this);
}


 protected void btnAddStatus_Click(object sender, EventArgs e)
        {
            StatusUpdate su = new StatusUpdate();
            su.CreateDate = DateTime.Now;
            su.AccountID =  _userSession.CurrentUser.AccountID;
            su.Status = txtStatusUpdate.Text;
            _statusRepository.SaveStatusUpdate(su);
            _alertService.AddStatusUpdateAlert(su);

            updateStatus.Update();

            //_redirector.GoToHomePage();
        }

 public void ShowAlerts(List<Alert> alerts)
        {

            repFilter.DataSource = alerts;
            repFilter.DataBind();

            if (repFilter.Items.Count == 0)
            {
                //lblMessage.Text = "You don't have any alerts yet!";
            }

        }

EDIT EDITEDIT EDITEDIT EDITEDIT EDITEDIT EDITEDIT EDITEDIT EDITEDIT EDITEDIT EDITEDIT EDIT

我已经更新了HTML(我已经取出了第二个UpdatePanel),但仍然得到了相同的结果 - 最新的更新在第二次按钮提交之前不会发布。

   <asp:UpdatePanel ID="updateStatus" UpdateMode="Conditional" runat="server">
         <ContentTemplate>
            <asp:TextBox Width="520" Height="35" style="font-size:13px;padding-left:0px;padding-right:0px;" id="txtStatusUpdate" runat="server"></asp:TextBox>
            <asp:Button style="font-size:25px;padding-left:0px;padding-right:0px;" ID="btnAddStatus" runat="server" Text="Add" OnClick="btnAddStatus_Click" />
            <table border="">
                <tbody>
                <asp:Repeater ID="repFilter" runat="server">
                    <ItemTemplate>
                        <tr>
                            <td class="date"><%# String.Format("{0:MM/dd/yyy}", ((Alert)Container.DataItem).CreateDate) %></td>
                            <td><%# ((Alert)Container.DataItem).Message  %></td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
                </tbody>
            </table>
        </ContentTemplate>      
        </asp:UpdatePanel>

  public class RespondentProfilePresenter
    {


     //CODE HERE....
public void Init(IRespondentProfile View)
        {
            _view = View;

            _view.SetAvatar(_accountBeingViewed.AccountID);
            _view.DisplayInfo(_accountBeingViewed);

            if (_userSession.CurrentUser != null)
                ShowDisplay();

            TogglePrivacy();
        }


private void ShowDisplay()
{

    List<Alert> _objAlerts = _alertService.GetAlertsByAccountID(_userSession.CurrentUser.AccountID);

    _view.ShowAlerts(_objAlerts);


}

}

1 个答案:

答案 0 :(得分:0)

我有点难以遵循你的代码,因为我没有你的BL课程(警报,IREspondedProfile等),所以我要猜一半:
在页面加载中,您可以调用RespondentProfilePresenter类的Init方法。
此方法调用ShowDisplay,最终绑定转发器。
请注意,这会在触发按钮的事件处理程序之前发生,这是您更新警报列表的代码中的位置。
在设置了转发器的数据源之后添加了新警报,因此您只能在每次按下其他按钮时看到更新。您需要重新排序代码,使得DataBind仅在添加新警报后才会发生。