【问题标题】:asp.net server side buttons clicks programaticallyasp.net 服务器端按钮以编程方式单击
【发布时间】:2014-11-23 14:04:23
【问题描述】:

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

我尝试了以下示例代码

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

我有 2 个观察结果(可能有用):

  1. 总是 Button2_Click(Button2, null);事件是页面完全加载时的最新事件(这很明显)。

  2. Page_Load(object sender, EventArgs e) 不 以编程方式单击按钮时完全击中。

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

【问题讨论】:

  • 对于使用 ASP 按钮的网页来说,这似乎是一个奇怪的场景。如果您想在页面加载后等待十秒钟,您将需要客户端代码。您是否研究过使用 JavaScript 以编程方式提交 HTML 表单?
  • @MatthewHaugen:感谢您的快速响应。我不知道如何实现这一目标。

标签: c# asp.net


【解决方案1】:

您在示例中所做的是调用 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 毫秒来加载页面,在 sleep 之前运行的代码不会提交给客户端以我认为你想要的方式浏览器。

【讨论】:

  • 虽然它解决了全部问题,但给了我解决问题的基石。我现在已经解决了,我很快就会在这里发布。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多