我想捕获在文件后面的代码页面加载方法中单击了哪个按钮。 按钮是用户控制按钮,它不会回发。由于它被许多其他形式使用,我不想改变那个按钮。 我试过这个
Dim ButtonID As String = Request("btnRefresh.ID")
但它不起作用。 是否可以在不触及用户控制和使用Javascript的情况下知道? 谢谢
答案 0 :(得分:0)
如此处所述How to check whether ASP.NET button is clicked or not on page load:
方法:Request.Params.Get(“__ EVENTTARGET”);会为...工作 CheckBoxes,DropDownLists,LinkButtons等。但这不起作用 用于按钮控件,如按钮和ImageButtons
但是你有一个解决方法,首先你必须在父页面中定义一个隐藏字段。在此字段中,您将使用javascript / jquery存储用户控件中的哪个按钮。然后在您的Parent Page Page_Load方法中,您只需阅读hiddenField.Value属性:
1)为每个输入类型提交按钮添加监听器:
$(document).ready(function () {
$("input[type=\"submit\"]").on("click", function () {
alert(this.name);
$("#hiddenField1").val(this.name);
});
});
2)[更好一个]将监听器添加到用户控件内的某个可识别的div中,并将事件委托给子输入,如下所示:
$(document).ready(function () {
$("#someElementOfUserControl").on("click", "input[type=\"submit\"]", function () {
alert(this.name);
$("#hiddenField1").val(this.name);
});
});
由于使用JQuery完成的所有操作都可以通过Javascript完成,因此您可以执行以下操作(我不会同时编写两个示例):
function handleClick(event) {
alert(event.target.name);
document.getElementById("hiddenField1").value = event.target.name;
}
var inputsInUC = document.getElementsByTagName('input');
for (i = 0; i < inputsInUC.length; i++) {
inputsInUC[i].addEventListener('click', handleClick, false);
}
请记住在所有html元素之后定义此javascript。
修改强>
此外,为了完整答案,请允许我告诉您,如果您可以更改用户控制行为的正确方法是使用此处所述的事件How do i raise an event in a usercontrol and catch it in mainpage?