我需要从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
的值。
有人可以告诉我我做错了吗?
答案 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;
}
}