【问题标题】:C# Click HTML Button from WebclientC#从Webclient单击HTML按钮
【发布时间】:2016-07-25 02:33:12
【问题描述】:

我正在开发一个 Windows 窗体应用程序。我希望网络客户端发布 NameValueCollection 中的值,然后点击提交按钮。但现在它只将值添加到 html 中,但从不提交它们。如何模拟这个按钮点击?

private void button2_Click(object sender, EventArgs e)
        {
            var requestData = new NameValueCollection
            {
                {"prodids", "somevalue" },
                {"customerid", "somevalue" },
                {"submit_button", "submit" }
            };
            byte[] request = client.UploadValues("myurl", "POST", requestData);
            string result = Encoding.UTF8.GetString(request);

【问题讨论】:

    标签: c# html webclient


    【解决方案1】:

    您需要获取包含您的按钮的<form> 元素,然后获取其action 属性。这是您的客户应向其发出请求的 URL。您可能还需要获取 action 属性来确定是发出 GET 还是 POST 请求。

    问题是,按钮本身并不重要:在网络浏览器中,如果它有“提交”动作,它只会触发包含表单来序列化内容并使用“方法”将它们发送到action url。

    当您使用客户端与网页交互时,您不能将其视为网络浏览器,更像是下载页面并使用文本编辑器打开它。没有什么是可点击的,没有 JS,甚至没有渲染——它只是从服务器发送的原始内容。

    编辑:

    所以,这完全是用 JavaScript 完成的,这是各种错误的。无论如何,您的方法是 POST,而您的操作是 /View/DashboardProxy.php?location=Dashboard/RequestServlet&postdata=1,因此您的呼叫将是: byte[] request = client.UploadValues("/View/DashboardProxy.php?location=Dashboard/RequestServlet&postdata=1", "POST", requestData);

    请注意,响应不会是整页,但可能没有任何内容或一些文本可以放入post_result_textarea

    哦,还要注意,在该 POST 请求中传递了超过 3 个值 - 值来自:server_id、prodids、shopid、customerid 和 specialbids。可能服务器要求填写所有这些字段。

    【讨论】:

    • 感谢您的回答。问题是 html 中没有
      元素。我确实注意到 html 的结果中有一个 PHP 函数。有没有办法从 C# 调用这个函数?
    • 您能否发布请求页面时获得的整个 HTML?该按钮可能使用 JavaScript 挂钩,实现的细节也将在 JS 中。
    • 我已将完整的 HTML/PHP 内容添加到我原来的问题中。
    【解决方案2】:

    您可以将 AJAX 与 WebMethod 一起使用。 (此示例使用 jQuery 处理 ajax 请求,但您也可以使用 plan vanilla javascript 执行此操作)

    $.post({
      type: "POST",
      url: /Default.aspx/methodX,
      data: data,
      dataType: dataType
    }).done(function(data){
      if (data === true) {
        console.log('everything worked out fine.')
      }
    });
    

    并使用以下内容编辑您的 .cs 文件。

    [WebMethod]
    public bool methodX(string data) {
      var requestData = new NameValueCollection
      {
        {"prodids", "somevalue" },
        {"customerid", "somevalue" },
        {"submit_button", "submit" }
      };
      byte[] request = client.UploadValues("myurl", "POST", data);
      string result = Encoding.UTF8.GetString(request);
    
      return true;
    }
    

    或类似的......希望你能从中得到一个想法。


    了解更多
    http://api.jquery.com/jquery.post
    https://msdn.microsoft.com/en-us/library/4ef803zd(v=vs.90).aspx

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2013-07-23
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      相关资源
      最近更新 更多