使更新面板组件更改项目在更新面板之外的可见性

时间:2011-03-08 01:57:24

标签: asp.net asp.net-ajax updatepanel repeater formview

我有一个转发器,这些项目可以通过编辑按钮进行编辑,该按钮可以在编辑模式下打开FormView。 formView最初是不可见的,并且转发器可见。按下编辑后,转发器将不可见,然后使用要编辑的项目可以看到窗体视图。

更改完成后,用户按下更新。这会将formview设置为不可见,并将转发器设置为可见。

问题是formview不可见但转发器不可见。我认为这是因为formview在更新面板中并且转发器不在?单击更新时,只更改了更新面板中的项目,因为它只是部分页面更新。

我无法将转发器放在更新面板中,因为要求公共视图不使用javascript。

有谁知道如何让转发器重新出现?

<asp:Repeater id="resultsRepeater" runat="server"  DataSourceID="vehiclesDataSource" >
  <ItemTemplate>
    <asp:Label id="makeLabel" runat="server" Text='<%# Eval("Make") %>' />
    <asp:Button id="editButton" runat="server" Text="Edit" CommandArgument='<%# Eval("Id") %>' OnClick="EditButton_Click" />
  </ItemTemplate>
<asp:Repeater>

<asp:UpdatePanel ID="updatePanel" runat="server">
  <ContentTemplate>
    <asp:Panel id="insertUpdatePanel" runat="server" Visible="false">
      <asp:FormView id="editformview" runat="server" DataKeyNames="Id" Datasourceid="VehiclesEditDataSource" >

        <EditItemTemplate>
          <uc:VehiclesEdit ID="VehiclesEdit" runat="server" />
            <asp:Button id="updateButton" runat="server" OnClick="Update_Click" />
        </EditItemTemplate>
      </asp:FormView>
    </asp:Panel>
  </ContentTemplate>
</asp:UpdatePanel>

protected void EditButton_Click(object sender, EventArgs e)
{
  resultsRepeater.Visible = false;
  insertUpdatePanel.Visible = true;
}

protected void Update_Click(object sender, EventArgs e)
{
  resultsRepeater.Visible = true;
  insertUpdatePanel.Visible = false;
}

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助。我有类似的问题,这对我有用。我只是使用ScriptManager来注册按钮(甚至按行迭代)作为回发控件,如下所示:

ScriptManager.GetCurrent(Page).RegisterPostBackControl(updateButton)

这会导致完整的回发,并允许我在更新面板外设置面板的可见性。我希望它有效!

答案 1 :(得分:0)

修订版:在UpdatePautton中添加一个PostBackTrigger,以便在单击UpdateButton时强制进行完整的回发。这将隐藏您的UpdatePanel并再​​次显示您的Repeater。请参阅下面的最终代码:

有关详细信息,请参阅:https://stackoverflow.com/questions/2545508/how-do-i-force-full-post-back-from-a-button-within-an-updatepanel

<asp:UpdatePanel ID="updatePanel1" runat="server">
<Triggers>
  <asp:PostBackTrigger ControlID="updateButton" />
</Triggers>
<ContentTemplate>
  <asp:Panel ID="Panel1" runat="server" Visible="false">
    <asp:FormView ID="editformview" runat="server" DataKeyNames="Id" DataSourceID="VehiclesEditDataSource">
      <EditItemTemplate>
        <uc:vehiclesedit id="VehiclesEdit" runat="server" />
      </EditItemTemplate>
    </asp:FormView>
  <asp:Button ID="updateButton" runat="server" OnClick="Update_Click" />
  </asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>