2013-02-12 43 views
2

我有一個div(id = main),它包含15個html選擇控件,其ID爲ddl1,ddl2,ddl3等等。在代碼隱藏中找不到HTML控件

現在我想從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選擇控件)... 任何人都可以告訴我原因或解決我的問題嗎?

+1

你說也許 - 你有沒有調試過,這裏有很多事情可能導致空引用錯誤? – Paddy 2013-02-12 09:05:55

+0

你是否在'main'中指定了'runat =「server」'? – DON 2013-02-12 09:09:03

回答

1

有兩件事情可能出錯了。既然你不使用asp.net下拉列表,所以你不能把它轉換成這 一個明顯

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

。 所以應該

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

另一種可能是其需要存在,如果你正在起訴html controls,並希望訪問C#頁上的屬性runat="server"

<select id="Select1" runat="server"> 
    <option value="1" Selected="True"> Item 1 </option> 
    ..... 
    </select> 
+0

你剛纔重複了已經寫在其他兩個答案中的內容。 – 2013-02-12 09:45:23

+0

@ShadowWizard是的,我知道這一點,但它幫助和被接受的解決方案。 – 2013-02-12 10:24:11

2

您是否已將runat="server"添加到控件中並且Id="ddl1"

2

在這種標記的情況下:

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

類型的ddl1不會DropDownList的,而是HtmlSelect,因此您的代碼更改爲:

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

如果仍然無效的錯誤,好機會xmlnodes爲空意味着加載XML文檔或選擇節點時出錯。

+0

謝謝...但它仍然不工作(可能是xmlnodeslist中的錯誤,試圖解決) – 2013-02-12 09:33:26

+0

那麼,爲什麼你將其他答案標記爲接受?它重複了我在這裏寫的東西。 – 2013-02-12 09:44:15