我正在尝试设置html innerhtml
标记的select
,但我无法设置此功能;因此,我需要使用outerhtml
功能。这样,不仅仅是我的代码HARDCODE
,但它也是荒谬的。我已经阅读了“InnerHTML IE 8 doesn't work properly? Resetting form”,但它没有帮助。
如果您告诉我如何设置html innerhtml
标记的select
功能,我将非常感激。
我的C#代码:
public void SetDefaultValue(string ControlID, string ControlValue)
{
System.Windows.Forms.HtmlDocument doc = webBrowser1.Document;
HtmlElement HTMLControl = doc.GetElementById(ControlID);
string ListResult;
string ListInnerHTML = "";
ListInnerHTML += "<OPTION value = " + LstString + ">" + LstString + "</OPTION>";
ListResult = "<SELECT id = " + '"' + HTMLControl.Id + '"' + " type = " + '"' + HTMLControl.GetAttribute("type") + '"' + " title = " + '"' +
HTMLControl.GetAttribute("title") + '"' + " name = " + '"' + HTMLControl.Name + '"' + " value = " + '"' + HTMLControl.GetAttribute("value") +
'"' + " size = \"" + HTMLControl.GetAttribute("size") + '"' + HTMLControl.GetAttribute("multiple").ToString() + "\">" + ListInnerHTML + "</SELECT>";
HTMLControl.OuterHtml = ListResult;
}
或
string _lsthtml = _htmlel.OuterHtml;
string[] _parts = ControlValue.Split(new char[] { ',' });
string _lstinner = "";
foreach (string _lst in _parts)
_lstinner += "<option value=" + _lst + ">" + _lst + "</option>";
_lsthtml = _lsthtml.Insert(_lsthtml.IndexOf(">") + 1, _lstinner);
_htmlel.OuterHtml = _lsthtml;
此代码有效,但我需要一些有效且干净的东西。
ReturnControlType
函数返回html标记的type
。
答案 0 :(得分:13)
这是一个官方的Internet Explorer错误:
BUG: Internet Explorer Fails to Set the innerHTML Property of the Select Object
一种解决方法
您可以尝试在文档的头部添加以下meta
标记之一:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
或
<meta http-equiv="X-UA-Compatible" content="IE=10" />
您还应该正确格式化option
代码的value
属性(LstString
中包含'
):
ListInnerHTML += "<OPTION value='" + LstString + "'>" + LstString + "</OPTION>";
更可靠的解决方案
由于上述修复可能是您的代码的解决方法,我建议使用更可靠的方法。考虑将 Microsoft.mshtml 的引用添加到项目中并修改您的方法,如下所示:
// add this to the top of the file containing your class
using mshtml;
public void SetDefaultValue(string ControlID, string ControlValue)
{
System.Windows.Forms.HtmlDocument doc = webBrowser1.Document;
IHTMLDocument2 document = doc.DomDocument as IHTMLDocument2;
var sel = doc.GetElementById(ControlID);
HTMLSelectElement domSelect = (HTMLSelectElement)sel.DomElement;
domSelect.options.length = 0;
HTMLOptionElement option;
// here you can dynamically add the options to the select element
for (int i = 0; i < 10; i++)
{
option = (HTMLOptionElement)document.createElement("option");
option.text = String.Format("text{0}", i);
option.value = String.Format("value{0}", i);
domSelect.options.add(option, 0);
}
}
答案 1 :(得分:2)
我真的不知道为什么innerHTML不适合你。
如果它不是你可以尝试替代方案:
http://innerdom.sourceforge.net/
答案 2 :(得分:1)
在此主题中,建议您使用控件的items集合 How to add items to dynamically created select (html) Control
请参阅此页面以获取完整示例: http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlselect.items.aspx