asp.net服务器端的按钮通过程序点击

本文关键字:过程 程序 按钮 net 服务器端 asp | 更新日期: 2023-09-27 18:24:58

我有两个服务器端的asp.net按钮,我需要自动点击按钮。即page_load之后,我需要点击按钮1,在页面上显示其结果后,等待10秒,然后点击按钮2。

我试过下面的样本代码

 protected void Page_Load(object sender, EventArgs e)
    {
        Button1_Click(Button1, null);
        Thread.Sleep(10000);
        Button2_Click(Button2, null);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        changeLabel.Text = "Button1";
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        changeLabel.Text = "Button2";
    }
}

我有两个观测(也许有用):

  1. 始终Button2_Click(Button2,null);事件是页面完全加载时的最新事件(这是显而易见的)。

  2. Page_Load(对象发送方,EventArgs e)不用程序点击按钮时点击atall。

任何如何实现解决方案的想法。

asp.net服务器端的按钮通过程序点击

您在示例中所做的是调用button1和button2的单击事件的处理程序,这与让用户单击按钮不同,并让表单回发到服务器。

如果你想让按钮自己点击,并将帖子返回到服务器,你需要添加javascript来为你点击按钮。

如果你想要一个在X秒后为你点击按钮的javascript,我会这样做:在您的aspx页面中:

<asp:button ID="Button1" runat="server" ClientIDMode="Static" OnClick="Button1_Click">
</asp:button>

在您的javascript文件或页面上的某个块中:

<script type="text/javascript">
    setTimeout(function(){
        document.getElementById("Button1").click();
    }, 10*1000); // 10 seconds
</script>

这里需要注意的是,您必须在按钮上设置ClientIDMode="Static",否则如果您使用母版页,它可能会有一个非常模糊的名称,或者您可以这样做:

<script type="text/javascript">
    setTimeout(function(){
        document.getElementById("<%= Button1.ClientID %>").click();
    }, 10*1000); // 10 seconds
</script>

如果您的.aspx文件中有javascript,而不是它自己的.js文件。

ps:如果你在aspx页面中执行Thread.Sleep(X),你只会让用户浏览器等待X毫秒的时间来加载页面,在睡眠之前运行的代码不会像我认为的那样提交给客户端浏览器。

Button_Click是服务器事件,当从客户端调用时,浏览器会将相关数据发布到服务器并请求新的页面内容,此时会调用page_load。

如果您想做一些事情,请将操作封装到某个方法,并在预渲染中调用该方法。或者,使用JavaScript。

protected void Page_PreRender(object sender, EventArgs e)
    {
        UpdateButton1()
        Thread.Sleep(10000); // no need to put sleep
        UpdateButton2();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        UpdateButton1();
    }
    protected void UpdateButton1()
    {
        changeLabel.Text = "Button1";
    }