[解決済み] JavaScriptによるASP.NETのポストバック
2022-02-19 13:57:17
質問
私はいくつかの小さな
div
を利用している
jQuery
ドラッグ可能です。これらの
div
の中に配置されます。
UpdatePanel
で、dragstop上では
_doPostBack()
JavaScriptの関数で、ページのフォームから必要な情報を取り出しています。
問題は、この関数を呼び出すと、ページ全体が再読み込みされますが、私は更新パネルだけを再読み込みしたいのです。
どうすればいいですか?
ここに完全な解決策があります。
asp.netページのformタグ全体
<form id="form1" runat="server">
<asp:LinkButton ID="LinkButton1" runat="server" /> <%-- included to force __doPostBack javascript function to be rendered --%>
<input type="button" id="Button45" name="Button45" onclick="javascript:__doPostBack('ButtonA','')" value="clicking this will run ButtonA.Click Event Handler" /><br /><br />
<input type="button" id="Button46" name="Button46" onclick="javascript:__doPostBack('ButtonB','')" value="clicking this will run ButtonB.Click Event Handler" /><br /><br />
<asp:Button runat="server" ID="ButtonA" ClientIDMode="Static" Text="ButtonA" /><br /><br />
<asp:Button runat="server" ID="ButtonB" ClientIDMode="Static" Text="ButtonB" />
</form>
ページのコードビハインドクラスの内容全体
Private Sub ButtonA_Click(sender As Object, e As System.EventArgs) Handles ButtonA.Click
Response.Write("You ran the ButtonA click event")
End Sub
Private Sub ButtonB_Click(sender As Object, e As System.EventArgs) Handles ButtonB.Click
Response.Write("You ran the ButtonB click event")
End Sub
- LinkButtonは、__doPostBack javascript関数がクライアントにレンダリングされることを保証するために含まれています。Buttonコントロールがあるだけでは、この__doPostBack関数がレンダリングされることはありません。この関数は、ほとんどのASP.NETページでさまざまなコントロールがあることによってレンダリングされるため、空のリンクボタンは通常必要ではありません。
どうしたんですか?
2つの入力コントロールがクライアントにレンダリングされます。
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
-
__EVENTTARGET
は__doPostBackの引数1を受け取ります。 -
__EVENTARGUMENT
は__doPostBackの引数2を受け取ります。
このように__doPostBack関数がレンダリングされます。
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
- 見ての通り、hidden inputに値を代入しています。
フォーム送信時/ポストバック発生時
-
ボタンクリック・ハンドラを実行したいサーバー・コントロール・ボタンの UniqueID を指定した場合 (
javascript:__doPostBack('ButtonB','')
の場合、そのボタンのクリックハンドラが実行されます。
クリックハンドラを実行せず、別の処理をしたい場合はどうすればよいのでしょうか?
に引数として好きなものを渡すことができます。
__doPostBack
そして、隠された入力値を分析し、それに応じて特定のコードを実行することができます。
If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
Response.Write("Do Something else")
End If
その他の注意事項
-
クリックハンドラを実行したいコントロールのIDがわからない場合はどうすればよいですか。
-
を設定することが許容されない場合
ClientIDMode="Static"
であれば、次のようにすればよいでしょう。__doPostBack('<%= myclientid.UniqueID %>', '')
. -
または
__doPostBack('<%= MYBUTTON.UniqueID %>','')
- これは、コントロールのユニークIDをjavascriptに注入します(必要な場合)。
-
を設定することが許容されない場合
関連
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] HTMLマークアップのどこに<script>タグを記述すればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】Uncaught ReferenceError。Firebase は定義されていません。
-
[解決済み】module.exports "モジュールが定義されていません"
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない