2009-11-08 63 views
2

我有一个WinForms C#应用程序。在名为“browser”的表单上有一个WebBrowser控件。从C#提交文件#

另外我有下面的代码:

  HtmlDocument doc = browser.Document; 

      HtmlElement mForm = doc.GetElementById("TheFormId"); 

      doc.GetElementById("Name").SetAttribute("value", "Some Name"); 

      HtmlElement elFile = doc.GetElementById("TheFile"); 
      elFile.Focus(); 
      SendKeys.Send("C:\\1.txt"); 

      mForm.InvokeMember("submit"); 

的问题是,它不提交的文件。如果我在相应的输入框中手动输入文件名 - 它可以工作。

环境:Win XP SP2的,IE6,VS 2008

编辑: 这解决了这一问题:

SendKeys.Send("C:\\1.txt" + "{ENTER}"); 
+0

你应该写一个答案,你自己的问题,然后将其标记为接受。 – okutane 2009-11-09 05:18:16

+1

在IE8中修补sendkeys漏洞。 – 2009-11-10 04:16:00

+0

@Dmitry - 感谢您的提示。会这样做。 – Oleg 2009-11-10 11:13:20

回答

0

这解决了这一问题:

SendKeys.Send("C:\\1.txt" + "{ENTER}"); 
0

<form>元素有ENCTYPE = “的multipart/form-data的” 属性?你需要这个来上传表单中的文件。

+0

你好马特,谢谢你的回答。是的,这个表格有enctype =“multipart/form-data” 而且我也可以手动提交文件。 – Oleg 2009-11-08 18:25:24

1
+0

感谢您的提示,但我怎样才能连接WebClient和WebBrowser?请注意,此表单中有20多个其他字段,我应该将它们全部+文件提交给他们。并在WebBrowser控件中向用户显示提交结果。 – Oleg 2009-11-10 12:06:40

+0

如果您使用Firefox,请安装名为Live HTTP标头的插件(http://livehttpheaders.mozdev.org/)。然后用手填写这个表单,启动这个插件,提交你的表单,你会看到所有发送的标题。现在你可以在代码中做同样的事情。如果您需要更多帮助,请让我知道,我在C#中有一些示例。 – 2009-11-11 09:03:55