C#单击Webclient中的HTML按钮

时间:2016-04-05 08:51:59

标签: c# html webclient

我正在使用Windows窗体应用程序。我希望webclient发布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);

2 个答案:

答案 0 :(得分:2)

您需要获取包含您的<form>元素按钮,然后获取其action属性。这是您的客户应该发出请求的网址。您可能还需要获取action属性以确定是否要进行GET或POST请求。

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

当您使用客户端与网页进行交互时,您不能将其视为Web浏览器,更像是下载页面并使用文本编辑器打开它。没有什么可点击的,没有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。服务器可能需要填写所有这些字段。

答案 1 :(得分:0)

您可以将AJAX与WebMethod一起使用。 (这个例子使用jQuery进行ajax请求,但你也可以用计划香草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