2010-07-24 3 views
1

Я парень PHP, изучающий некоторые .NET. Я манипулирую с помощью элемента управления UpdatePanel для небольшой панели инструментов.Обновление панели обновления ASP.NET один раз - затем ничего не делает

В файле .aspx, я использую OnClick для запуска кода за файл, чтобы обновить ярлык +1

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<div id="Container"> 
<asp:UpdatePanel runat="server" ID="UpdatePanel1" 
    OnLoad="UpdatePanel1_Load"> 
    <ContentTemplate> 
     <asp:Label ID="CounterOne" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 

</asp:UpdatePanel> 

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="UpdatePanel1_Increment"/> 

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

Вот CodeBehind:

public void UpdatePanel1_Increment(object sender, EventArgs e) 
     { 
      counter = counter + 1; 
      CounterOne.Text = counter.ToString(); 

     } 

мне нужно сбросить что-то на контроле ли?

Спасибо!

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

ответ

2

Удалить OnLoad даже из UpdatePanel и добавьте следующий код, прежде чем закрыть UpdatePanel.

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
</Triggers> 

Добавляя Trigger, вы говорите ScriptManager, чтобы обновить эту UpdatePanel, когда Button1 будет нажата.

Эта ссылка является прекрасным введением в www.asp.net о том, как использовать UpdatePanels и триггерами: http://www.asp.net/ajax/tutorials/understanding-asp-net-ajax-updatepanel-triggers

EDIT: Ваша проблема, скорее всего, связано с переменной счетчика в UpdatePanel1_Increment. Каждый раз, когда вы возвращаете обратно, переменная счетчика сбрасывается на 0. Таким образом, UpdatePanel обновляется правильно, только он обновляется с 0 + 1 = 1 каждый раз. UpdatePanels создают иллюзию синхронных обновлений, но обновление происходит асинхронно, а переменные не поддерживаются сервером. Вам нужно каким-то образом сказать код, что новое значение для счетчика было обновлено, поскольку значение счетчика «забыто» сразу после обновления UpdatePanel.

Существует множество способов передать значение счетчика на сервер. Быстрый и простой способ заключается в следующем:

public void UpdatePanel1_Increment(object sender, EventArgs e) 
     { 
      counter = int.Parse(CounterOne.Text); //This is how we'll tell the server what the counter value currently is. 
      counter = counter + 1; 
      CounterOne.Text = counter.ToString(); 

     } 

Наконец, убедитесь, что CounterOne.Text = «0» при загрузке страницы и все будет работать, как вы ожидаете.

+0

Не должно ли свойство OnClick кнопки вызывать скрипт в CodeBehind и обновлять метку? Я внес свои изменения, но никаких изменений не было. – tpow

+0

Да, вы не должны ничего менять с Button1. Если вы поместите контрольную точку внутри UpdatePanel1_Increment, вы можете попасть в точку останова. Также вы делаете что-либо внутри метода PageLoad? –

+0

Кроме того, я просто внимательно посмотрел на ваш код. Можете ли вы поделиться кодом для метода «UpdatePanel1_Load»? –

Смежные вопросы