単純なASPページでは、TextBox AutoPostBackイベントはボタンのクリックイベント(ボタンが非常に速くタップされる場所を除く)と他のコントロール(ListBoxなど)のAutoPostBackイベントを防ぎます。TextBox AutoPostBackはさらにイベントを先取りします
あり、ここで同様の問題だが、私は、クライアント側やAJAXのソリューションを使用することを余儀なくされていると満足していませんでした:Have to click button twice in asp.net (after autopostback textbox)
例ASPXページ:背後
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="temp.aspx.cs" Inherits="temp" %>
<!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>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" OnTextChanged="PostBack"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="PostBack" Text="Button" /><br />
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="PostBack">
<asp:ListItem>value1</asp:ListItem>
<asp:ListItem>value2</asp:ListItem>
</asp:ListBox><br />
<br />
Events Fired:<br />
<asp:TextBox ID="TextBox2" runat="server" Height="159px" TextMode="MultiLine" Width="338px"></asp:TextBox></div>
</form>
</body>
</html>
C#コード:
public partial class temp : System.Web.UI.Page
{
protected void PostBack(object sender, System.EventArgs e)
{
this.TextBox2.Text += string.Format("PostBack for - {0}\n", ((System.Web.UI.Control)sender).ID);
}
}
クリックイベントの代わりにmousedownを使用してボタンのこの問題を部分的に解決することができました(私は余分なAutoPostBもブロックしました) ackイベントをクライアント側で実行し、ボタンクリックイベント中に余分なフィールドの変更を処理した場合)
しかし、これは私のボタンが標準(リリース時にクリック)のように動作していないことを意味します。
javascriptクライアント側ですべてを実行する必要はありませんが、この問題の解決策はありますか? (これらのポストバック中にサーバーデータを読み込むコードをたくさん書いているので、JavaScriptは理想的なソリューションではありません)。
これらのページのAJAXライブラリに切り替えることも避けようとしています。私はセキュリティ監査などを経なければならない。
注:私は現在、ASP.Net 2.0/VS 2005で作業していますが、このタイプの問題が、それ以降のリリースで修正されていれば、それは魅力的な引数。 (私が理解する限り、ASP.Net 4/VS 2010でも同じ問題が起きているようです)
入力が変更されたときに自動的にポストバックしようとしていますか?これは古風なようですか?ボタンをフォームを送信する方法にしたい場合は、入力コントロールのオートポストバックプロパティを取り出します。 –
おそらくあなたの望む機能がここで助けになると書いています。あなたはオートポストバックのすべてで何を達成しようとしていて、通常のクライアントサイドの機能を操作していますか? –
「検索」ボタンで検索条件を指定します。私は100万のレコードが検索されていると言いますが、おそらく500〜10,000のユニークな値を持つ複数のインデックスが日付範囲とともにあります。 AutoPostBacksは、日付範囲に基づいて、リストされたユニークなインデックス値をトリミングします。 –