我有两个按钮控件。当我点击其中一个时,我想确定是哪一个导致了页面加载的回发。如何确定这一点?
<asp:Button id="Button1"
Text="Sort Ascending"
CommandName="Sort"
CommandArgument="Ascending"
OnCommand="CommandBtn_Click"
runat="server"/>
<asp:Button id="Button2"
Text="Sort Descending"
CommandName="Sort"
CommandArgument="Descending"
OnCommand="CommandBtn_Click"
runat="server"/>
sender is Button2
,sender as Button2
,((Button)sender)).ID
以及其他许多方式。但总的来说是个好建议。 - abatishchev您是否有经典ASP背景?当我第一次使用ASP.NET时,我也有同样的问题。
考虑另一种方法:
与其在Form_Load中检测postback,然后找出是什么触发了它,不如为每个按钮创建一个特定的事件处理程序。这就是Web Forms的全部意义-让您可以以非常类似于Windows应用程序的方式开发应用程序。
Request["__EVENTTARGET"]
方法(并将其标记为答案)。 - Darbio当使用type为button的输入框时,其值将通过post请求发送。例如,如果您有<input type="button" name="Quote" value="Quote">,则会在Post中得到button-name=Quote,就像简单文本输入一样。因此,您可以使用以下代码检查post是否包含按钮的值(对不起,我的vb):
Dim isQuote As Boolean = HttpContext.Current.Request.Form(SubmitQuote.UniqueID) IsNot Nothing
因此,如果它不是Nothing(null),那么提交了SubmitQuote按钮的post请求。
顺便说一句,对我来说HttpContext.Current.Request("__EVENTTARGET")也无法正常工作。
在我的实现中,页面上有几个表单;如果某些按钮控件触发了后台提交,就需要执行进一步的操作。
这些控件的类型如下,它们不会填充Request["__EVENTTARGET"]
我通过检查在Page_Load
子程序中传递给表单请求的控件的UniqueID
来确定以下按钮控件是否引发了后台提交:
- ASP.NET:
<asp:Button ID="Button1" runat="server" />
<asp:Button ID="Button2" runat="server" />
为了轻松处理以下嵌套图像按钮引发的后续请求,我利用OnClientClick
属性调用一个Javascript函数,该函数将补充隐藏字段控件的值填充为触发控件的UniqueID
,然后同样在Page_Load
子程序中检查隐藏控件的值:
- 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
String ButtonID = Request["__EVENTTARGET"];
button.UniqueID
。 - Darbio