我有 2 个按钮控件。当我单击一个时,我试图确定哪一个导致页面加载中的回发。如何确定这个?
5 回答
本示例中显示了如何使用 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 时,我也想到了同样的问题。
考虑另一种方法:
与其在 Form_Load 中检测回发,然后找出触发它的原因,不如为每个按钮创建一个特定的事件处理程序。这就是 Web 表单的全部意义所在——因此您可以使用与开发 Windows 应用程序非常相似的方式来开发应用程序。
真正输入类型按钮在发布请求中发送其值。例如,如果您有,您将进入 Post button-name=Quote ,就像它是简单的文本输入一样。因此,您可以使用如下代码检查 post 是否包含按钮的值(对不起我的 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" />
为了简单地处理以下嵌套图像按钮是否发起了回发,我利用了调用 javascript 函数的属性,该函数将使用发起控件OnClientClick
的值填充补充隐藏字段控件的值,然后查看隐藏控件值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
在页面加载检查这个
String ButtonID = Request["__EVENTTARGET"];