如何知道从父窗体Asp.net点击哪个用户控件按钮?

时间:2016-12-07 12:56:33

标签: asp.net vb.net webforms

我想捕获在文件后面的代码页面加载方法中单击了哪个按钮。 按钮是用户控制按钮,它不会回发。由于它被许多其他形式使用,我不想改变那个按钮。 我试过这个

Dim ButtonID As String = Request("btnRefresh.ID")

但它不起作用。 是否可以在不触及用户控制和使用Javascript的情况下知道? 谢谢

1 个答案:

答案 0 :(得分:0)

如此处所述How to check whether ASP.NET button is clicked or not on page load

  

方法:Request.Params.Get(“__ EVENTTARGET”);会为...工作   CheckBoxes,DropDownLists,LinkBut​​tons等。但这不起作用   用于按钮控件,如按钮和ImageButtons

但是你有一个解决方法,首先你必须在父页面中定义一个隐藏字段。在此字段中,您将使用javascript / jquery存储用户控件中的哪个按钮。然后在您的Parent Page Page_Load方法中,您只需阅读hiddenField.Value属性:

JQuery的

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);
        });
    });

的Javascript

由于使用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?