1

ユーザーが領域を選択してからトピックを選択し、トピックに基づいて一連のコントロールがロードされる動的フォームを作成しています。フォームのオプションはすべて XML ファイルで定義されています。

私の問題は、XML をトラバースしているときに、作成したテキスト ファイルに 2 つある定義済みのコントロールに到達し、各コントロールを 2 回作成していることです。いくつかのコードを示してから説明する方がよいと思うので、ここに私のコードを示します。

 <?xml version="1.0" encoding="utf-8" ?>
 <options>
  <option name="xerox">
   <sub_option name="Paper Jam">
    <input type="dropdown" name="location" />
    <input type="textbox" name="printername" />
   </sub_option>
   <sub_option name="New Printer Request" />
   <sub_option name="Supply Request" />
   <sub_option name="Hardware Failure" />
 </option>
</options> 

そして、以下のC#コード

 protected void loadControls(string parent, string parentNode)
    {
        XmlDocument itemList = new XmlDocument();
        itemList.Load(@"c:\inetpub\wwwroot\sp\css\itemList.xml");
        Panel controls = new Panel();
        XmlNodeList nodeList = itemList.SelectNodes("options/child::node()");
        test.Text = parent;
        foreach (XmlNode node in nodeList)
        {
            if (node.Attributes["name"].Value == parentNode && node.HasChildNodes)
            {
                test.Text = "for 2 coming";
                foreach (XmlNode subnode in node.ChildNodes)
                {
                    if (subnode.Attributes["name"].Value == parent && subnode.HasChildNodes)
                    {
                        foreach (XmlNode optionNode in subnode.ChildNodes)
                        {

                            string controlType = optionNode.Attributes["type"].Value;
                            string controlName = optionNode.Attributes["name"].Value;
                            switch(controlType)
                            {
                                case "dropdown":
                                    DropDownList ddl = new DropDownList();
                                    qna.Controls.Add(ddl);
                                    break;
                                case "textbox":
                                    TextBox tb = new TextBox();
                                    qna.Controls.Add(tb);
                                    break;       
                            }

                        }
                    }
                }
            }


        }

以下の出力 (これは紙詰まりを選択した後です) 出力

4

1 に答える 1

1

問題は以下のコード行にあると思います。

test.Text = "for 2 coming";
foreach (XmlNode subnode in node.ChildNodes)
{

ここでforeachループの代わりに以下をチェックする必要があります

if(node.ChildNodes.Count>0)
{
  ...
}
于 2013-01-10T09:29:41.283 に答える