Как мне получить кнопку внутри asp:UpdatePanel для обновления всей страницы?
-
03-07-2019 - |
Вопрос
У меня есть кнопка внутри панели обновления, с помощью которой я хотел бы обновить всю страницу.я установил 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 (...) на нажатие кнопки.