私は2つのボタンコントロールを持っています。クリックすると、ページの読み込みでポストバックが発生した原因を特定しようとしています。これを判断するにはどうすればよいですか?
5 に答える
タイプボタンで実際に入力すると、投稿リクエスト内でその値が送信されます。たとえば、Post button-name=Quote のように単純なテキスト入力を取得した場合。したがって、次のようなコードを使用して、投稿にボタンの値が含まれているかどうかを確認できます(私のvbで申し訳ありません):
Dim isQuote As Boolean = HttpContext.Current.Request.Form(SubmitQuote.UniqueID) IsNot Nothing
Nothing (null)でない場合、投稿は SubmitQuote ボタンによって送信されています。
ところで、私にとって HttpContext.Current.Request("__EVENTTARGET") も機能しませんでした。
私の実装では、ページにいくつかのフォームがあります。特定のボタン コントロールによってポストバックがトリガーされた場合は、さらに操作が必要です。
コントロールは次のタイプであり、入力されませんRequest["__EVENTTARGET"]
- ボタン (フォームのルート)
- 画像ボタン (Datagrid 内にネスト)
コントロールの がサブUniqueID
内のフォーム リクエストに渡されたことを確認することで、次のボタン コントロールがポストバックを引き起こしたかどうかを判断します。Page_Load
- ASP.NET:
<asp:Button ID="Button1" runat="server" />
<asp:Button ID="Button2" runat="server" />
次のネストされた画像ボタンがポストバックを引き起こしたかどうかを簡単に処理するためOnClientClick
に、補助的な非表示フィールド コントロールの値を刺激するコントロールの値に入力する JavaScript 関数を呼び出す属性を利用しUniqueID
、非表示コントロールの値を確認します。同様にPage_Lode
サブで:
- ASP.NET:
<script type="text/javascript">
function SetSource(SourceID) {
var hiddenField = document.getElementById("<%=HiddenField1.ClientID%>");
hiddenField.value = SourceID;
}
</script>
<asp:HiddenField ID="HiddenField1" runat="server" Value="" />
<asp:ImageButton ID="ImageButton1" runat="server" OnClientClick="SetSource(this.id)" />
次にPage_Load
、何らかの方法で実装します。
-VB.NET
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
' ...
If Not Page.IsPostBack Then
If Not String.IsNullOrEmpty(Me.Page.Request.Form(Button1.UniqueID)) Then
' ...
ElseIf Not String.IsNullOrEmpty(Me.Page.Request.Form(Button2.UniqueID)) Then
' ...
ElseIf Not Me.Page.Request.Form(HiddenField1.UniqueID) Is Nothing _
And Not String.IsNullOrEmpty(Me.Page.Request.Form(HiddenField1.UniqueID)) Then
' ...
HiddenField1.Value = String.Empty
Else
' ...
End If
End If
End Sub