日期:2014-05-17  浏览次数:21128 次

求C# winform中点击按钮执行网页JS提交表单代码实现~~!
已知网页中定义保存JS代码:

function doSave(obj)

{
  obj.action="/lemis"+"/supervise/entBasicInfoAction.do?method=save&form=save";
  querybutton2[2].setEnabled(false);
  obj.submit();

}

网页中提交表单按钮定义:

<td class="coolButton"  onaction="doSave(document.forms[0])"><imgsrc="/lemis/images/icons/save.gif" align=absMiddle> 保存</td>

求实现,点击winform上(不是网页上)的提交按钮,执行此段JS表单提交代码,提交表单。
PS:1.C# winform  中
    2.webBrowser控件加载含有上述JS代码的网页.
    3.含有此代码的网页位于框架网页中的 mainFrame  框架.


------解决方案--------------------
在.Net 2.0当中,使用WebBrowser实现这样的功能很简单!

在.Net 2.0中,整个HTML文档以及其包含的各个HTML元素,都和一个个HtmlDocument、HtmlElement之类的.Net对象对应。因此只要找到这个“保存”按钮对应的HtmlElement对象,为其click事件添加Event Handler即可。
假设HTML源代码如下:
<html>
<body>
<input type="button" id="btnClose" value="关闭" />
</body>
</html>


那么找出该按钮并为之添加Event Handler的代码如下:

HtmlDocument htmlDoc = webBrowser.Document;
HtmlElement btnElement = htmlDoc.All["btnClose"];
if (btnElement != null)
{
btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);
}


其中 HtmlBtnClose_Click是按下Web按钮时的Event Handler。

很简单吧?那么稍稍高级一点的——我们都知道一个HTML元素可能有很多各种各样的事件,而HtmlElement这个类只给出最常用、共通的几个。那么,如何响应其他事件呢?这也很简单,只需要调用HtmlElement的AttachEventHandler就可以了:

btnElement.AttachEventHandler("onclick", new EventHandler(HtmlBtnClose_Click));
//这一句等价于上面的 btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);


对于其他事件,把"onclick"换成该事件的名字就可以了。例如:
formElement.AttachEventHandler("onsubmit", new EventHandler(HtmlForm_Submit));



对于你的情况,是图像按钮,那么先找到图像!

HtmlElement Submit;
HtmlElementCollection hec = this.webBrowser1.Document.GetElementsByTagName("img");
foreach (HtmlElement he in hec)
{
    if  he.GetAttribute("src") == "lemis/images/icons/save.gif")
    {
        Submit = he;//找到按钮
        Submit.InvokeMember("click");//提交
        break;
    }
}


<td class="coolButton" onaction="doSave(document.forms[0])"><imgsrc="/lemis/images/icons/save.gif" align=absMiddle> 保存</td>