2009-06-17 24 views
0

我試圖按照this,但默認的modelbinder讓我的數組在服務器端爲null。在ASP.NET MVC中使用HTML單選按鈕陣列

HTML:

Question 1: 
<input name="list[0]" type="radio" value="1000" />No 
<input name="list[0]" type="radio" value="1001" />Yes 
Question 2: 
<input name="list[1]" type="radio" value="1002" />No 
... 

控制器動作:

public ActionResult Anamnesis(string[] list) 
{ 

如果我只選擇了第二個 「無」(列表[0]缺少),那麼DefaultModelBinder是不可能將其改造成一個陣列。

Thanx提前!

更新#1

重新格式化基礎上的評論,謝謝!

更新#2

只是一個因子評分:創建一個隱藏的輸入畢竟列表項,並以這種方式它的工作原理。但毫無疑問,這很醜陋。

Question 1: 
<input name="list[0]" type="radio" value="1000" />No 
<input name="list[0]" type="radio" value="1001" />Yes 
<input type="hidden" name="list[0]"/> 
Question 2: 
<input name="list[1]" type="radio" value="1002" />No 
<input type="hidden" name="list[1]"/> 
... 

令它非常重要:隱藏的價值只提交當無線電處於未選中狀態。這個想法來自ASP.NET MVC幫手。 (順便說一下,我不能使用Html.RadioButton存檔此行爲。)

+1

數組基於C#。將是一個開始。 – 2009-06-17 22:56:22

+0

真的!如果我選擇第一個元素,效果很好 - 但如果我選擇其他選項(列表[2]),則會失敗。看起來默認聯編程序需要一個從零開始的數組。但是,這是不可能的單選按鈕...我可以切換到jQuery創建請求。 – boj 2009-06-17 23:15:02

+0

如果這些是單選按鈕,即它們是互斥的(選擇一個或另一個),那麼你應該給它們相同的名稱。否則,如果名稱不同,它們將被視爲單獨的「集合」,並且可以將它們//都選中! (並且無法取消選擇。) - Mike – Funka 2009-06-17 23:36:25

回答

0

您的更新#2似乎可以解決您的問題。你的Update#2也很有趣,你也可以使用這種方法來提供一個默認值(如999),以便在沒有檢查到任何東西時使用。

也許有另一種類似的方式來做你在問什麼,這是基於this article,也使用隱藏的輸入。這個想法是,你可以爲您的每一個收音機創建索引,以避免出現在表單中較早的一個缺失的選擇會導致所有後續選擇要刪除的情況:

Question 1: 
<input name="list.Index" type="hidden" value="0" /> 
<input name="list[0]" type="radio" value="1000" />No 
<input name="list[0]" type="radio" value="1001" />Yes 
Question 2: 
<input name="list.Index" type="hidden" value="1" /> 
<input name="list[1]" type="radio" value="1000" />No 
<input name="list[1]" type="radio" value="1001" />Yes 

我之所以提出這一點,是在您可能希望通過唯一ID將您的答案與特定問題相關聯,而不僅僅是使用0,1,2等。我鏈接的文章將顯示如何執行此操作的示例。

祝你好運!
-Mike

-1

單選按鈕的名稱屬性應該是列表,而不是列表[n]。