DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Ajax TextBoxのChangeイベントとButtonのClickイベントが順番に発生しない問題について

環境/言語:[WinXPSP2、C#、.NET Framework2.0 + Ajax(Microsoft Ajax Toolkit)]
分類:[ASP.NET]

通常のASP.NETのアプリケーションをAjax化しました。
Ajax化はMicrosoftのAjax Control Toolkitを使用しております。

そこで、テキストボックスとボタンを貼り付け、
テキストボックスのTextChangedイベントで画面の更新処理を行い、
ボタンのClickイベントで画面の確定処理を行っています。


Ajax化をはかる前は、TextChangedイベント⇒Clickイベントと
順番に発生していたのですが、Ajax化をはかり、UpdatePanelに
配置してみたところ、イベントがTextChangedのみになりました。

何故こうなったのかはまったく不明で、また、この動きだと
Clickボタンを押下しているのにClickが反応せずに困っています。

何とか、テキストボックスの確定を行い、
Clickイベントを発生させたいのですが、可能でしょか?

ソース
---aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default_Phase7 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
_literalDebug.Text += "<br />" + TextBox1.Text;
}
protected void Button1_Click(object sender, EventArgs e)
{
_literalDebug.Text += "<br />Click!";
}
protected void TextBox2_TextChanged(object sender, EventArgs e)
{
Literal1.Text += "<br />" + TextBox2.Text;
}
protected void Button2_Click(object sender, EventArgs e)
{
Literal1.Text += "<br />Click!";

}
}
---aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default_Phase7.aspx.cs" Inherits="Default_Phase7" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align: left">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
Ajax 版のサンプル<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
&nbsp;<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="True"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" CausesValidation="False" OnClick="Button1_Click" /><br />
&nbsp;<asp:Literal ID="_literalDebug" runat="server"></asp:Literal><br />
<hr style="width: 682px" />
&nbsp;
</ContentTemplate>
</asp:UpdatePanel>
&nbsp; 通常版のサンプル<br />
&nbsp;<asp:TextBox ID="TextBox2" runat="server" OnTextChanged="TextBox2_TextChanged"></asp:TextBox>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" /><br />
&nbsp;<asp:Literal ID="Literal1" runat="server"></asp:Literal><br />

</div>
<div id="deubg" style="text-align: left">デバックプリント<br />
</div>
</form>
</body>
</html>
<script type="text/javascript">
function debug(str) {
document.getElementById("debug").innerHTML += "<br />" + str;
}
</script>
</script>
解決しましたので、ご報告いたします。

対処療法ですが、ボタンのmousedonwイベントを拾いボタンクリックさせました。

対処
1.ユーザテキスト入力し、直にボタンを押下を押下を行う。
2.TextChangeEvent(Ajaxの擬似同期通信)で画面を更新。(このときにJavaScriptのMouseDownでフラグを立てる)
3.2の通信後のイベントでフラグを見てボタンをクリックを実行。

という流れで共通化し、対応できました。

有難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板