Как получить кнопку внутри asp: UpdatePanel для обновления всей страницы? - PullRequest
3 голосов
/ 21 октября 2008

У меня есть кнопка внутри панели обновления, с которой я хотел бы обновить всю страницу. Я установил 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");
}

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

Ответы [ 6 ]

6 голосов
/ 21 октября 2008

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

4 голосов
/ 21 октября 2008

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

1 голос
/ 21 октября 2008

Если вы добавляете PostBackTrigger к первой панели обновления, например,

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

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

0 голосов
/ 18 октября 2012

У меня был похожий, но немного более сложный случай, и мне потребовалось больше дня, чтобы выяснить этот ответ. (Ответ по существу такой же, как и у @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» - это идентификатор кнопки.)

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

0 голосов
/ 21 октября 2008

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

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

0 голосов
/ 21 октября 2008

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

...