Đây là một giải pháp hoàn chỉnh
Toàn bộ thẻ biểu mẫu của trang asp.net
<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>
Toàn bộ nội dung của lớp mã phía sau của trang
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 được bao gồm để đảm bảo rằng hàm javascript __doPostBack được hiển thị cho máy khách. Chỉ cần có các điều khiển Nút sẽ không làm cho hàm __doPostBack này được hiển thị. Chức năng này sẽ được hiển thị nhờ có nhiều điều khiển trên hầu hết các trang ASP.NET, vì vậy thường không cần một nút liên kết trống
Chuyện gì vậy?
Hai điều khiển đầu vào được hiển thị cho máy khách:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
__EVENTTARGET
nhận đối số 1 của __doPostBack
__EVENTARGUMENT
nhận đối số 2 của __doPostBack
Hàm __doPostBack được hiển thị như sau:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
- Như bạn có thể thấy, nó chỉ định các giá trị cho các đầu vào ẩn.
Khi biểu mẫu gửi / đăng lại xảy ra:
- Nếu bạn đã cung cấp UniqueID của Nút điều khiển máy chủ có trình xử lý nhấp chuột vào nút mà bạn muốn chạy (
javascript:__doPostBack('ButtonB','')
thì trình xử lý nhấp vào nút cho nút đó sẽ được chạy.
Điều gì sẽ xảy ra nếu tôi không muốn chạy trình xử lý nhấp chuột mà muốn làm điều gì đó khác thay thế?
Bạn có thể chuyển bất cứ thứ gì bạn muốn làm đối số cho __doPostBack
Sau đó, bạn có thể phân tích các giá trị đầu vào ẩn và chạy mã cụ thể tương ứng:
If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
Response.Write("Do Something else")
End If
Ghi chú khác
- Điều gì sẽ xảy ra nếu tôi không biết ID của điều khiển có trình xử lý nhấp chuột mà tôi muốn chạy?
- Nếu nó không phải là chấp nhận được để thiết lập
ClientIDMode="Static"
, sau đó bạn có thể làm một cái gì đó như thế này: __doPostBack('<%= myclientid.UniqueID %>', '')
.
- Hoặc là:
__doPostBack('<%= MYBUTTON.UniqueID %>','')
- Thao tác này sẽ đưa id duy nhất của điều khiển vào javascript, nếu bạn muốn