Кнопка в UpdatePanel требует два щелчка для запуска - PullRequest
2 голосов
/ 07 октября 2009

Я использую VB.NET и Webforms с MS AJAX.

У меня есть кнопка на панели обновления MS AJAX. Когда страница загружена, видимость кнопки устанавливается на «ложно» декларативно.

После того, как пользователь установил флажок (также в UpdatePanel), я установил для кнопки видимость true, и она стала видимой, как и ожидалось.

Однако пользователь должен дважды нажать кнопку, чтобы что-то произошло. Первый щелчок просто фокусирует внимание на кнопке. Требуется еще один щелчок, чтобы получить обратную передачу (проверено визуально и с точками останова)

Есть идеи, почему это может быть?

Большое спасибо!

Anthony

Ответы [ 4 ]

4 голосов
/ 07 октября 2009

У вас есть валидатор на странице с динамическим отображением?

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

Если это так, вы можете исправить это, установив для свойства валидатора display значение static.

Другие мысли:

Есть ли какой-либо javascript, работающий на стороне клиента кнопки onclick, onmousedown, onmouseup?

Вы динамически добавляете эту кнопку на страницу?

Вы устанавливаете CheckBox свойство *1015* на True или False? Если для него установлено значение true, вы можете находиться в середине асинхронной обратной передачи, пока нажимаете кнопку.

0 голосов
/ 08 октября 2009

Спасибо за ваш вклад.

У меня есть сторонний элемент управления загрузкой файлов в UpdatePanel вместе с кнопкой, и это вызывает конфликт с кнопкой.

Я прибег к решению проблемы с помощью JavaScript. Я добавляю следующий метод в верхней части страницы:

<script language="javascript" type="text/javascript">
    function DisplayImportButton() {
        document.getElementById('<%= btnImport.ClientId %>').style.visibility = "visible";
    }
</script>

Я добавляю следующее в конец страницы, чтобы кнопка всегда была скрыта в начале:

<script language="javascript" type="text/javascript">
    var elem;

    elem = document.getElementById('<%= btnImport.ClientId %>');

    if (elem) {        
        elem.style.visibility = "hidden";
    }
</script>

В обработчике для изменения проверенного статуса флажка я добавил:

ScriptManager.RegisterClientScriptBlock(Me, GetType(Page), "ImportButtonScript", _
        "DisplayImportButton();", True)

С уважением

0 голосов
/ 08 октября 2009

Дикая догадка: проверяете ли вы значение флажка на этапе инициализации или загрузки вашей страницы? Из-за цикла страницы элементы управления флажками еще не установят свои значения в репозитории и будут отображаться непроверенными. Только во второй обратной передаче ваш код будет правильно видеть проверенный статус (загрузка из viewstate) и отображается кнопка.

Установите видимость в флажках Изменить событие или в PreRender.

0 голосов
/ 07 октября 2009

Я протестировал это в IE6 и Firefox 3.5, и он отлично работает для меня Ваша конфигурация отличается?

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" OnCheckedChanged="CheckBox1_CheckedChanged" Text="Checkbox" />
        <asp:Button ID="Button1" runat="server" Text="Button" Visible="False" OnClick="Button1_Click" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

protected void CheckBox1_CheckedChanged( object sender, EventArgs e )
{
    Button1.Visible = CheckBox1.Checked;
}

protected void Button1_Click( object sender, EventArgs e )
{
    Label1.Text = DateTime.Now.ToString();
}
...