以MVVM的方式从C#提交POST表单
本文关键字:提交 POST 表单 MVVM 方式 | 更新日期: 2023-09-27 17:59:25
我正在使用WebBrowser控件来自动管理网页。当我启动WPF应用程序时,它会显示ant允许我登录的网页。然后,我的应用程序开始执行一些自动任务,方法是转到一个页面,填写表单并提交(这是一个POST表单)。它以不同的值提交相同的表单约100次。
现在我的代码如下:
void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
var doc = (HTMLDocument) webBrowser1.Document;
var form = doc.getElementById("theForm");
SetValueOfFormInput(doc, "id", Foo.ID);
SetValueOfFormInput(doc, "item1", Foo.Item1);
SetValueOfFormInput(doc, "item2", Foo.Item2);
form.all.item("submit").click();
}
private static void SetValueOfFormInput(HTMLDocument doc, string name, string value)
{
var item = doc.all.item(name);
item.setAttribute("value", value);
}
我可以用更好的方式做到这一点吗?我可以用MVVM的方式做到吗?
不,我不能修改网页来简化管理:-(
编辑:理想情况下,我可以做到这一点,而不必使用WebBrowser控件。该程序登录到网站并执行所有任务,而无需修改html页面
为什么不使用WebClient或WebRequest类?对于web客户端,您可以使用UploadValues方法,该方法将完全执行您想要的操作(http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx)你也可以简单地添加apt类来使用cookie,这样你的登录将是"永久的"(http://stackoverflow.com/questions/1777221/c-using-cookiecontainer-with-webclient-class)
如果你想做更多的模型驱动,我会使用WebRequest(已经准备好了一个cookiecontainer),并有一些包含所需数据的类。这个将派生自一个类,该类可以将所有需要的属性序列化为一个简单的字符串,然后发布到服务器-AFAIK它与getter参数相同(param1=val1¶m2=val2&…)所以基本上:
class Data : Postable { public string Param1{get;set;} public string Param2{get;set;} ...}
class Postable
{
public override string ToString()
{
StringBuilder ret = new StringBuilder();
foreach(Property p in GetType().GetProperties())
{
ret.Append("{0}={1}&", p.Name, p.<GetValue>);
}
return ret.ToString();
}
}