Почему '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