Почему 'innerhtml' не работает должным образом для тега 'select'
Я пытаюсь установить тег innerhtml
тега html select
, но я не могу установить эту функцию, поэтому мне нужно использовать функцию outerhtml
. Этот способ не только мой код HARDCODE
, но и это нелепо. Я уже прочитал "InnerHTML IE 8 работает неправильно? Сброс формы ', это не помогло, хотя.
Я был бы очень признателен, если бы вы рассказали мне, как установить innerhtml
функцию тега html select
.
Мой код С#:
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
возвращает type
тега html.
Ответы
Ответ 1
Это официальная ошибка Internet Explorer:
ОШИБКА: Internet Explorer не удается установить свойство innerHTML объекта выбора.
Обходное решение
Вы можете попробовать добавить один из следующих тегов meta
в голову документа:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
или
<meta http-equiv="X-UA-Compatible" content="IE=10" />
Вы также должны правильно отформатировать атрибут option
tag 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);
}
}
Ответ 2
Я действительно не знаю, почему innerHTML не работает для вас.
Если вы просто не можете попробовать альтернативу:
http://innerdom.sourceforge.net/
demo
Ответ 3
В этом потоке вы можете использовать коллекцию элементов элемента управления
Как добавить элементы в динамически созданный элемент управления select (html)
обратитесь к этой странице для получения полного примера:
http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlselect.items.aspx