2

div (id=main) があり、内部に 15 個の html 選択コントロールが含まれており、それらの ID は ddl1、ddl2、ddl3 などです。

ここで、XML ファイルからインデックスを動的に選択または割り当てたいので、このコードを書きました。

private void readxml(string spath) {
  XmlDocument doc = new XmlDocument();
  doc.Load(spath);
  //doc.LoadXml(spath);
  XmlNodeList xmlnodes = doc.SelectNodes("/Hedge/*");
  for (int i=1; i <= 15; i++) {
    (main.FindControl("ddl" + i) as DropDownList).SelectedIndex = Int32.Parse(xmlnodes[i].InnerText);
  }
}

しかし、ここでエラーが発生しています...

オブジェクト参照がオブジェクト インスタンスに設定されていません。

コントロール (HTML 選択コントロール) を見つけることができないためである可能性があります...誰かが私に理由を教えてくれますか、私の問題を解決できますか?

4

3 に答える 3

2

runat="server"コントロールに追加しましたId="ddl1"か?

于 2013-02-12T09:08:46.577 に答える
2

このようなマークアップの場合:

<div id="main" runat="server">
    <select id="ddl1" runat="server"></select>
</div>

のタイプはddl1DropDownList ではなく HtmlSelect になるため、コードを次のように変更します。

(main.FindControl("ddl" + i) as HtmlSelect).SelectedIndex = Int32.Parse(xmlnodes[i].InnerText);

それでも null エラーの場合は、 xmlnodesnull である可能性が高く、XML ドキュメントのロードまたはノードの選択で問題が発生したことを意味します。

于 2013-02-12T09:09:46.040 に答える
1

うまくいかなかった可能性のあることが2つあります。1つは明らかです

  (main.FindControl("ddl" + i) as DropDownList).SelectedIndex = 
            Int32.Parse(xmlnodes[i].InnerText);

asp.netドロップダウンリストを使用していないため、これにキャストすることはできません。だからそれは

     (main.FindControl("ddl" + i) as HtmlSelect).SelectedIndex = 
                                                    Int32.Parse(xmlnodes[i].InnerText);

もう1つは、C#ページで訴訟を起こし、アクセスしたいrunat="server"場合に必要な属性である可能性があります。html controls

   <select id="Select1" runat="server">
     <option value="1" Selected="True"> Item 1 </option>
     .....
  </select>
于 2013-02-12T09:18:30.377 に答える