Asp.net 如何确定哪个按钮导致回发

Asp.net 如何确定哪个按钮导致回发,asp.net,.net,vb.net,postback,Asp.net,.net,Vb.net,Postback,我有两个按钮控制。当我单击其中一个时,我试图确定是哪一个导致了页面加载中的回发。如何确定这一点?如何使用CommandName和CommandArgument,如中所示。这样,您可以只使用一个处理程序 <asp:Button id="Button1" Text="Sort Ascending" CommandName="Sort" CommandArgument="Ascending" OnCommand="CommandBtn_Cl

我有两个按钮控制。当我单击其中一个时,我试图确定是哪一个导致了页面加载中的回发。如何确定这一点?

如何使用CommandName和CommandArgument,如中所示。这样,您可以只使用一个处理程序

<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"/>

您是否具有典型的ASP背景?当我第一次使用ASP.NET时,我也遇到了同样的问题

考虑另一种方法:


与其在表单加载中检测回发,然后找出触发它的原因,不如为每个按钮创建一个特定的事件处理程序。这就是Web表单的全部要点——因此您可以用与Windows应用程序非常相似的方式开发应用程序。

在页面加载中检查此项

String ButtonID = Request["__EVENTTARGET"];

带有类型按钮的实际输入在post请求中发送其值。例如,如果您有,您将进入Post按钮名称=引号,就像它是简单的文本输入一样。因此,您可以使用如下代码检查post是否包含按钮的值(对不起,我的vb):

Dim isQuote As Boolean=HttpContext.Current.Request.Form(SubmitQuote.UniqueID)不是空的

所以,如果它不是空的,那么post是通过SubmitQuote按钮发送的


顺便说一句,我的HttpContext.Current.Request(“\uu EVENTTARGET”)也不起作用。

在我的实现中,我的页面上有几个表单;如果回发是由某些按钮控件触发的,则需要进一步操作

控件为以下类型,不填充
Request[“\uu EVENTTARGET”]

  • 按钮(位于窗体的根)
  • 图像按钮(嵌套在数据网格中)
我通过查看控件的
UniqueID
是否已传递给
页面加载
子页面中的表单请求,确定以下按钮控件是否发起回发:

- ASP.NET:
    <asp:Button ID="Button1" runat="server" />
    <asp:Button ID="Button2" runat="server" />
- 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)" />
然后,
页面加载
将通过某种方式实现:

-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

你为什么不按一下按钮呢?然后您将有两个不同的处理程序,每个按钮一个。除此之外:你如何处理回邮?通过什么事件?@huMptyduMpty-公平点,但你可能会认为Tim的评论和我的答案本身值得保留?比如:var button=sender as button@戈文德:对<代码>发送者是按钮2
发送者是按钮2
((按钮)发送者)).ID
和许多其他方式。但总的来说,这是一个很好的建议。我不知道这项技术。这将为您提供发送请求的对象的
唯一ID
。e、 g.
button.UniqueID
我之所以想从表单加载而不是创建一个特定事件,是因为我正在创建一个动态表,正如您所知,我每次回发时都必须重新创建它。我注意到这会导致我的页面速度变慢,在这个例子中,我看到当我不需要使用特定的函数来重新创建表,但我不知道是什么按钮/控件导致了回发在这种情况下,您可以使用上面解释的
请求[“\u EVENTTARGET”]
方法(并标记为答案)这是JavaScript方法,但另一种方法是。