我正在使用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);
答案 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