问题 为什么'innerhtml'无法正常使用'select'标签


我想设置 innerhtml 一个HTML select 标签,但我无法设置此功能;因此,我需要使用 outerhtml feature.This方式,不仅是我的代码 HARDCODE ,但它也是荒谬的。我已经读过'InnerHTML IE 8无法正常工作?重置表单',但它没有帮助。

如果你告诉我如何设置,我将非常感激 innerhtml HTML的功能 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 函数返回 type 一个HTML标签。


10971
2018-05-21 05:13


起源

为什么不使用asp:DropDownList? - Pete
@Pete:因为我需要在C#中完成它,所以它不在桌面上。 - Pedram
使用HtmlControl.InnerHtml的问题究竟是什么? - TGlatzer
你可以发布一些代码,显示在什么特殊情况下innerHTML不起作用? - MentholBonbon
System.Windows.Forms.HtmlDocument doc = webBrowser1.Document; HtmlElement HTMLControl = doc.GetElementById(ControlID); string ListResult; string ListInnerHTML =“”; ListInnerHTML + =“<OPTION value =”+ LstString +“>”+ LstString +“</ OPTION>”; HTMLControl.InnerHtml = ListInnerHTML; - Pedram


答案:


这是一个官方的Internet Explorer错误:

BUG:Internet Explorer无法设置选择对象的innerHTML属性

一个解决方法

您可以尝试添加以下之一 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);
    }
}

13
2018-05-23 08:24





我真的不知道为什么innerHTML不适合你。
如果它不是你可以尝试替代方案:
http://innerdom.sourceforge.net/ 

演示


2
2018-05-23 08:05





在这个线程中,你使用控件的items集合进行sugested 如何将项添加到动态创建的select(html)控件中

请参阅此页面以获取完整示例: http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlselect.items.aspx


1
2018-05-24 12:57