2011-12-06 26 views
4

我需要創建一個調查頁面,其中包含從數據庫讀取的以下結構。在ASP.NET web表單中創建動態UI

Survey QuestionA 
a) Answer1 [Radio button] 
b) Answer2 [Radio button] 
c) Answer3 [Radio button] 
d) Answer4 [Radio button] 

repeats.. 

該頁面有很多需要動態添加的問題。我需要將表單的結果存儲在提交的Question對象的數組中。 我知道這樣做的一種方式是在表格中創建動態用戶界面,並通過FindControl獲取值。 有沒有更好的(優雅)的方式來做到這一點?

+0

幾周前,我遇到了同樣的問題,不得不在提交頁面後再次找到相應的控件;我想知道是否還有更優雅的方式:) – Matten

+0

,我相信你也需要在回發時重新創建UI。 – devnull

+0

我最近回答了一個類似的問題[here](http://stackoverflow.com/a/8611075/4830)。 –

回答

2

在ASP.Net MVC中,它使用默認模型綁定器處理您的髒活。當然你也可以創建你自己的。雖然這並不能爲您提供ASP.Net Web窗體中所希望的自動解決方案,但我在此情況下的首選方法是遵循ASP.Net MVC爲其命名約定使用的類似常見模式,從而簡化它。然後你可以開始編寫可以隨着時間的推移重用的代碼。這裏有一篇文章的鏈接,解釋了Haack的博客 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx的命名約定。

長期的建議是要來ASP.Net MVC,生活就是更好地在這裏:)

0

您可以使用jQuery通過檢查屬性來獲取選定的單選按鈕,並與題號追加它們。 例如問題1你有

所以,你可以得到迭代throught單選按鈕,像這樣的價值觀: $(「輸入[類型=‘無線電’]」)檢查

2

我建議創建一個userconrol實現問題(標籤)和答案(單選按鈕)和每個控件(標籤,收音機)綁定到您的usercontrol的屬性,然後您可以從數據庫讀取問題併爲每個數據創建此用戶控件對象並將相應的數據設置爲用戶控件的屬性,並從控件中讀取數據,反之亦然。

雖然您必須在每個回帖中重新創建usercontrols,並將默認數據設置爲這些。你

還可以創建與不同的UI多個用戶控件繼承一個接口IQuestion工廠類創建的每個用戶控件的依賴的環境可變因素。

+0

+1同意。通過DOM查看數據是性能噩夢。 – Alex

+1

@Craig我暗示「甚至不考慮切換到客戶端的數據檢索代碼,無論你如何實現這一點」。好的,也許這不是那麼清楚,我的不好。 – Alex

+0

@alex對不起alex,我沒有看到答案。感謝您指出了這一點。我刪除了我的評論以避免任何混淆。乾杯! – Craig

0

您可以隨時以編程方式添加控件。

說你有,你可以執行ASPNET面板控制...

RadioButton rb = new RadioButton(); 
rb.ID = "rbRadioButton"; 
rb.Name = "rbRadioButton"; 
rb.cssClass = "radioClass"; 
Panel1.Controls.Add(rb); 

藉口例子的嚴厲性,沒有了視覺工作室此刻用手去檢查它,但我希望你的想法。你可以從本質上基於數據庫來構建整個問題。不利的一面是獲取值,因爲你必須重寫Render方法(如果我記得沒錯,已經有一段時間了,如果你想讓我找到它,我確實有一個例子)。

我承認這有點矯枉過正,但它是一種可能的解決方案。

0

爲此目的使用radiobuttonlist(它可以在工具箱中看到,它是一個asp.net標準控件)控件。這取決於您的需求。