草庐IT

c# webBrowser.Document : reloading page after postback 收藏

coder 2023-08-12 原文

我正在开发一个简单的应用程序,它可以自动浏览包含两个下拉菜单和一个按钮的页面。页面看起来像这样:

------DropDown1-------

------DropDown2-------

-------Button---------

现在的问题是,DropDown2 的内容是通过选择 Dropdown1 动态生成的。

我在 C# 中写了这样的代码:

private void webBrowser1_DocumentCompleted(object sender, 
        WebBrowserDocumentCompletedEventArgs e)
{
    HtmlElement elem = webBrowser1.Document.GetElementById("DropDown1");
    elem.SetAttribute("selectedIndex", "1");
    elem.RaiseEvent("onChange");
    HtmlElement elem = webBrowser1.Document.GetElementById("DropDown2");
    elem.SetAttribute("selectedIndex", "5");
    elem.RaiseEvent("onChange");
}

引发 onChange 事件后,浏览器加载新值,但我无法获取和设置 DropDown2 值,因为文档仍然认为 DropDown2 的值为空。

如何获取和设置在 DropDown2 中生成的新值?

最佳答案

我通过在引发 onChange 事件后调用“__doPostBack”脚本找到了解决方案。当我调用 doPostBack 时,文档会重新加载,因此我可以检索新值。这是代码:

    private void BeginOperation()
    {
        webBrowser1.Navigate("somewebpage", false);
        Task = 0;
    }
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        HtmlElement elem;

        switch (Task)
        {
            case 0:
                //HtmlDocument mydoc = webBrowser1.Document;
                 elem = webBrowser1.Document.GetElementById("ddlCity");
                MessageBox.Show(elem.All.Count.ToString());
                elem.SetAttribute("selectedIndex", "1");
                //elem.RaiseEvent("onChange");
                object[] args = {"someparameters"};
                webBrowser1.Document.InvokeScript("__doPostBack",args);
                Task++;
            break;
            case 1:
                elem = webBrowser1.Document.GetElementById("ddlDistrict");
                elem.SetAttribute("selectedIndex", "2");
                elem.RaiseEvent("onChange");
                object[] args2 = {"someparameters"};
                webBrowser1.Document.InvokeScript("__doPostBack",args2);
                Task++;
            break;
        }
     }

关于c# webBrowser.Document : reloading page after postback 收藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168278/

有关c# webBrowser.Document : reloading page after postback 收藏的更多相关文章

  1. ruby-on-rails - 建模收藏夹 - 2

    我希望将Favorite模型添加到我的User和Link模型。业务逻辑用户可以有多个链接(即可以添加多个链接)用户可以收藏多个链接(他们自己的或其他用户的)一个链接可以被多个用户收藏,但只有一个所有者我对如何为这种关联建模以及在模型就位后如何创建用户收藏夹感到困惑?classUser 最佳答案 下面的数据模型怎么样:classUser:destroyhas_many:favorite_links,:through=>:favorites,:source=>:linkendclassLink:destroyhas_many:favor

  2. ruby - 如何在不使用 HERE-DOCUMENT 语法的情况下在 Ruby 中制作多行字符串文字? - 2

    问题总结我想尝试使用Ruby来完成我在Python中所做的事情。在Python中它有r"""syntaxtosupportrawstrings,这很好,因为它允许将原始字符串与代码内联,并以更自然的方式连接它们,而无需特殊缩进。在Ruby中,当使用原始字符串时,必须使用其次是EOT在单独的行中,这会破坏代码布局。你可能会问,为什么不使用Ruby的%q{}?嗯,因为%q{}与Python的r"""相比有局限性因为它不会转义多个\\\并且只处理单个\.我正在动态生成Latex代码并写入一个文件,该文件稍后用pdflatex编译。Latex代码包含类似\\\的内容在许多地方。如果我使用Rub

  3. ruby - 与 Roar 的关联和收藏 - 2

    假设我们有这样的东西:classCompanyincludeMongoid::Documenthas_many:usersfield:name,type:StringendclassUserincludeMongoid::Documentbelongs_to:companyfield:name,type:StringendmoduleCompanyRepresenterincludeRoar::Representer::JSONproperty:nameendmoduleUserRepresenterincludeRoar::Representer::JSONproperty:name

  4. 科研中论文常见数学符号及其含义(科研必备,建议收藏) - 2

    论文常见数学符号及其含义(科研必备)返回论文和资料目录数学符号在数学领域是非常重要的。在论文中,使用数学符号可以使得论文更加简洁明了,同时也能够准确地描述各种概念和理论。在本篇博客中,我将介绍一些常见的数学符号及其含义(省去特别简单的符号),希望能够帮助读者更好地理解数学论文。高等数学∑i=1nxi\sum_{i=1}^nx_i∑i=1n​xi​(求和符号):表示将x1,x2,…,xnx_1,x_2,\dots,x_nx1​,x2​,…,xn​中的所有数相加,例如∑i=1nxi\sum_{i=1}^nx_i∑i=1n​xi​表示将x1,x2,…,xnx_1,x_2,\dots,x_nx1​,x

  5. ruby-on-rails - Mongoid::Document 是 GlobalID::ActiveJobs 的标识吗? - 2

    根据ActiveJobsguide,第8节,它说:ThisworkswithanyclassthatmixesinGlobalID::Identification,whichbydefaulthasbeenmixedintoActiveModelclasses.Mongoid::Document混合ActiveModel::Model,但我找不到GlobalID::Identification在它的included_modules中。GlobalID::Identification在哪里定义?我可以有效地使用任何Mongoid::Document吗?为我的ActiveJobs?

  6. QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏 - 2

    QT串口调试工具第一节虚拟串口工具安装第二节QT创建一个基于QWidget的项目第三节UI界面设计第三节项目头文件widget.h第四节项目实现文件widget.cpp第五节main函数第六节编译结果重点第七节使用QT打包程序,不安装QT的电脑可使用第一节虚拟串口工具安装-----------------------------------------下载所需工具---------------------------------------------------------------------链接:https://pan.baidu.com/s/1QkT36S4EnH2HEAhZ1TZ8

  7. 关于Document mapping type name can‘t start with ‘_‘, found: [_update] - 2

    在修改elasticsearch时,用_update进行局部修改,修改失败,报错{    "error": {        "root_cause": [            {                "type": "invalid_type_name_exception",                "reason": "Document mapping type name can't start with '_', found: [_update]"            }        ],        "type": "invalid_type_name_exce

  8. Javascript document.getElementsByClassName 不返回所有元素 - 2

    这个问题在这里已经有了答案:Howtochangeclassforallelementsretrievedbydocument.getElementsByClassName(3个答案)关闭6年前。我有以下javascript代码(纯js,没有库),但是当它运行时它只返回一个元素而不是两个functionchangeButtonStyles(){varactualButtons=document.getElementsByClassName("read-more");for(vari=0;i它应该从页面返回两个元素,这样我就可以同时修改它们,但它只返回一个,或者循环只迭代一个。这是为什么

  9. javascript - $(document.body) 和 document.body 是一样的吗?上课打扫垃圾和捆绑? - MooTools 1.3 - 2

    我正在构建一个MooTools类,我的初始化函数中有这个:this.css=null;window.addEvent('domready',function(){this.document=$(document);this.body=$(document.body);this.head=$(document.head);}.bind(this));好的,现在开始提问...我应该在init中声明this.css=null还是任何其他空变量:this.css=null;//Maybethis.css=''-emptystring?接下来是关于窗口和文档...我是否应该将其放入$()中,因为

  10. javascript - 为什么对象在被 document.getElementById 编辑后必须为 IE 清空? - 2

    我经常在第三方JavaScript代码中看到:varel=document.getElementById(elementId);对象经常被置空,并且沿着这个操作的评论说它是为IE完成的:el=null;//IE真正的目的是什么?有这方面的资源吗? 最佳答案 通过nixing引用,它们打破了DOM对象和JavaScript对象之间相应的循环依赖,这些对象在旧版IE中由不同的子系统控制(因此不可能被垃圾收集)。例如:varel=document.getElementById(elementId);el.onclick=function(

随机推荐