Сделайте так, чтобы компонент панели обновления изменил видимость элемента за пределами панели обновления - PullRequest
0 голосов
/ 08 марта 2011

У меня есть повторитель, и элементы можно редактировать с помощью кнопки редактирования, которая открывает 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 ]

1 голос
/ 30 марта 2012

Это может помочь. У меня была похожая проблема, и это сработало для меня. Я просто использовал ScriptManager, чтобы зарегистрировать кнопку (даже повторяемую по строке) в качестве элемента управления обратной передачи, например:

ScriptManager.GetCurrent(Page).RegisterPostBackControl(updateButton)

Это вызвало полную обратную передачу и позволило мне установить видимость панели за пределами панели обновления. Я надеюсь, что это работает!

0 голосов
/ 08 марта 2011

ПЕРЕСМОТРЕНО: добавьте PostBackTrigger к вашей UpdatePanel, чтобы вызвать полный постбэк при нажатии кнопки UpdateButton.Это скроет вашу панель обновлений и снова покажет ваш репитер.См. Окончательный код ниже:

Для получения дополнительной информации см .: /1817388/kak-zastavit-polnyi-postbek-s-knopki-vnutri-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>    
...