Как мне получить кнопку внутри asp:UpdatePanel для обновления всей страницы?

StackOverflow https://stackoverflow.com/questions/221595

Вопрос

У меня есть кнопка внутри панели обновления, с помощью которой я хотел бы обновить всю страницу.я установил ChildrenAsTriggers="false" и UpdateMode="Conditional".

У меня есть пример кода, который демонстрирует мою проблему.

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" />
      <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" />
   </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="mySecondPanel" runat="server">
   <ContentTemplate>
       <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label>

И код позади:

protected void myFirstButton_Click(object sender, EventArgs e)
{
  myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss");
}
protected void mySecondButton_Click(object sender, EventArgs e)
{
  mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss");
}

Я хочу обновить метку, которой нет на панели обновления, при нажатии второй кнопки.Вторая кнопка должна находиться на панели обновления.Я не хочу помещать метку на панель обновления.

Это было полезно?

Решение

Попробуйте добавить триггер PostBack к первой панели обновления для второй кнопки. Это скажет панели обновления, что кнопка должна сделать полный постбэк.

Другие советы

ScriptManager.GetCurrent(Page).RegisterPostBackControl(кнопка);решит вашу проблему

Если вы добавите PostBackTrigger на первую панель обновления следующим образом

<Triggers>
   <asp:PostBackTrigger ControlID="mySecondButton" />
</Triggers>

Это приведет к тому, что при нажатии второй кнопки произойдет полный возврат. Это именно то поведение, которое я искал.

У меня был похожий, но немного более сложный случай, и мне потребовалось больше дня, чтобы выяснить этот ответ. (Ответ по существу такой же, как и у @serkan. Я просто расширяю его.) У нас был пользовательский элемент управления ASP.NET, в котором была кнопка, которая при нажатии генерировала изображение и запускала загрузку изображения. , Это прекрасно работало на обычной странице, но не совсем, когда пользовательский элемент управления был встроен в панель обновления. Я не мог понять, как сказать панели обновления, чтобы она выполняла обычную обратную передачу только для этой кнопки, тем более что кнопка находилась в пользовательском элементе управления и не имела явного доступа к ней со страницы, использующей ее.

То, что в итоге сработало, было предельно просто. Не нужно было пытаться указать триггер обратной передачи для панели. Вместо этого в Page_Load пользовательского элемента управления я добавил следующее:

    protected void Page_Load(object sender, EventArgs e)
    {
        // If the chart is within an update panel then we need to tell the script manager
        // to not do an asynch postback on chartdownload.  If we don't, the download
        // doesn't work.
        var scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterPostBackControl(ChartSaveButton);
        }
        // Rest of Page_Load followed here...

Кроме того, я создал свойство ChartSaveButton , чтобы получить легкий доступ к элементу управления для кнопки:

    private Control ChartSaveButton
    {
        get { return FindControl("btnDownloadChart"); }
    }

(«btnDownloadChart» - это идентификатор кнопки.)

Добраться сюда было мучительно, но я рад, что решение такое элегантное. Я надеюсь, что это поможет вам.

для меня эта настройка не имеет смысла. имейте в виду, что хотя панели обновления могут быть отличным способом достижения эффекта, подобного ajax, они не идеальны во всех ситуациях.

если вашей архитектуре страницы требуется расположение элементов, как у вас в вашем примере, вам лучше использовать методы страницы или службы с javascript для обновления метки.

Если метка отсутствует на панели обновлений, единственный способ обновить значение - обновить всю страницу, как при обычной обратной передаче. Вы должны будете сделать перенаправление на ту же страницу, чтобы обновить ее. Платформа ajax знает, как обрабатывать перенаправления, даже если запрос поступил с панели обновления, поэтому просто нажмите Response.Redirect (...) на нажатие кнопки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top