ImageButtonコントロールをクライアント側のスクリプト実行にのみ使用しようとしています。OnClientClickプロパティを使用して実行するクライアント側スクリプトを指定できますが、ユーザーがクリックするたびにスクリプトが投稿されないようにするにはどうすればよいですか?このボタンがクリックされたときに投稿する理由はありません。CausesValidationをFalseに設定しましたが、これで投稿が停止することはありません。
8 に答える
この問題はすでに解決されていることはわかっていますが、簡単な解決策は、HTMLのonclickメソッド(つまり、ASPX OnClientClickメソッド)からfalseを返すことです。
<asp:ImageButton ID="ImageNewLink" runat="server"
ImageUrl="~/images/Link.gif" OnClientClick="DoYourStuff(); return false;" />
falseを返すと、ブラウザがサーバーにリクエストを返すのを停止し、.NETポストバックを停止します。
他のコントロールのポストバック機能と競合することなくそれを行うことができる1つの方法は次のとおりです。
ボタンを次のように定義します。
<asp:Button runat="server" Text="Button" UseSubmitBehavior="false" OnClientClick="alert('my client script here');my" />
OnClientClickのハンドラーで終わる「my」は、ポストバックを強制するasp.netの__doPostBackクライアントイベントをエイリアスする方法です。このスクリプトと同様のことを何もしないことで、動作をオーバーライドするだけです。
<script type="text/javascript">
function my__doPostBack(eventTarget, eventArgument) {
//Just swallow the click without postback of the form
}
</script>
編集:ええ、私はasp.netに私が望むことをさせるために引っ張る必要があるいくつかの汚いトリックの後で、シャワーを浴びる必要があるように感じます。
別の解決策は、何もしないPostBackUrlを定義することです。
<asp:imagebutton runat="server" PostBackUrl="javascript:void(0);" .../>
<image src="..." onclick="DoYourThing();" />
サーバー側の画像制御を使用する
<asp:Image runat="server" .../>
それにクライアントonclick
イベントを追加できることは間違いありません。
これは私にとって素晴らしい働きをします:
OnClientClick
スクリプトを記述PostBackUrl="javascript:void(0);"
し、ポストバックを回避するために使用します。
<div class="close_but">
<asp:ImageButton ID="imgbtnEChartZoomClose" runat="server" ImageUrl="images/close.png" OnClientClick="javascript:zoomclosepopup();" PostBackUrl="javascript:void(0);" />
</div>
解決策1
<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="return false;" />
またはソリューション2
<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="yourmethod(); return false;" />
さらに(解決策2)、javascriptメソッドはこの形式である可能性があります
<script type="text/javascript">
function yourmethod() {
__doPostBack (__EVENTTARGET,__EVENTARGUMENT); //for example __doPostBack ('idValue',3);
}
</script>
コードビハインド
protected void Page_Load(object sender, System.EventArgs e)
{
if (this.IsPostBack) {
string eventTarget = this.Request("__EVENTTARGET") == null ? string.Empty : this.Request("__EVENTTARGET");
string eventArgument = this.Request("__EVENTARGUMENT") == null ? string.Empty : this.Request("__EVENTARGUMENT");
}
}
OnClientClickを使用してスクリプトを記述し、PostBackUrl = "javascript:void(0);" ポストバックを避けるため