如何从webBrowser控件中的当前选定选项中获取innerText

时间:2013-12-16 03:26:15

标签: c# html webbrowser-control innertext

我需要从webBrowser控件中当前选中的选项中选择innerText

以下是html的表示形式:

<SELECT ID="F8">
<OPTION VALUE="option1">option1</OPTION>
<OPTION VALUE="option2" selected>option2</OPTION>
<OPTION VALUE="option3">option3</OPTION>
</SELECT>

以下是我的尝试:

if (webBrowser1.Document.GetElementById("F8") != null)
{
    HtmlElement selectF8 = webBrowser1.Document.GetElementById("F8");
    foreach (HtmlElement item in selectF8.Children ) 
    {
        if (item.GetAttribute("selected") != null)
        {
            assigneeText.Text = item.InnerText;
        }
    }
}

...但它完全忽略了if语句,并始终为assigneeText.Text赋予option3的值,而不是所选option2的值。

有人可以告诉我我做错了吗?

3 个答案:

答案 0 :(得分:6)

更改控件上的选择时,所选属性不会更新。它用于在首次显示控件时定义所选项目(默认选项)。

要获取当前选择,您应调用selectedIndex方法以找出所选项目。

HtmlElement element = webBrowser1.Document.GetElementById("F8");
object objElement = element.DomElement;
object objSelectedIndex = objElement.GetType().InvokeMember("selectedIndex",
BindingFlags.GetProperty, null, objElement, null);
int selectedIndex = (int)objSelectedIndex;
if (selectedIndex != -1)
{
  assigneeText.Text = element.Children[selectedIndex].InnerText;
}

如果您使用的是c#4,您也可以使用DLR来避免使用反射。

var element = webBrowser1.Document.GetElementById("F8");
dynamic dom = element.DomElement;
int index = (int)dom.selectedIndex();
if (index != -1)
{
  assigneeText.Text = element.Children[index].InnerText;
}

答案 1 :(得分:1)

我发布此消息后不久,我找到了一种方法来完成这项工作: 我的解决方案是

HtmlElement selectF8 = webBrowser1.Document.GetElementById("F8");
foreach (HtmlElement item in selectF8.Children)
{
    if (item.GetAttribute("value") == webBrowser1.Document.GetElementById("F8").GetAttribute("value"))
    {
        assigneeText.Text = item.InnerText;
    }
}

这似乎有用,虽然对C#和.net来说是新手,但Fraser的答案也有效,可能是更好的解决方案。

答案 2 :(得分:1)

foreach (HtmlElement item in elesex.Children)
{              
    if (item.GetAttribute("selected") == "True")
    {
        sex = item.InnerText;
    }
}