2009-07-10 144 views
0

在發佈的表單上創建和處理一組相關控件的正確方法是什麼?在發佈表單時處理複選框列表和單選按鈕列表

從使用ASP.NET MVC我看到一個標準的選擇是創建一個數量的輸入和相同的「name」屬性值分配給他們。就像這樣:

<input name="OrderOptions" type="checkbox" value="1" /> 
<input name="OrderOptions" type="checkbox" value="2" /> 
... 
<input name="OrderOptions" type="checkbox" value="N" /> 

代加工的形式,當我們在一個逗號分隔的字符串中的所有值:

public OrderController 
{ 
    public ActionResult (FormCollection form) 
    { 
     string selection = form["OrderOptions"]; 
    } 
} 

現在,這是它應該如何與任何服務器技術做了什麼?爲輸入分配相同的名稱值是否會破壞某些驗證規則或某些內容?

一個額外的問題:如果我是使用內置的HTML輔助,我會得到既「id」和「name」屬性所產生的輸入。像這樣:

<input id="OrderOptions" name="OrderOptions" type="checkbox" value="1" /> 
<input id="OrderOptions" name="OrderOptions" type="checkbox" value="2" /> 
... 
<input id="OrderOptions" name="OrderOptions" type="checkbox" value="N" /> 

但是,在文檔中有多個具有相同「id」的元素顯然是無效的。它仍然有效。

如果我放棄了標準的幫手,讓我自己,做我需要插入「id」屬性來輸入,如果我不真的需要它(除非在某些情況下,標籤)?有些人告訴我們必須始終將「id」和「name」屬性分配給元素,因爲與舊瀏覽器存在一些不兼容性,並且「name」屬性已被棄用(我知道它僅適用於其他元素)。但即使我想,我也必須爲輸入元素分配不同的ID /名稱值,然後我無法將它們作爲一個組處理。你看到我的困境?

任何意見非常感謝。

回答

1

a)不分配相同的名字肯定是有效的行爲 - 這是單選按鈕怎麼知道他們是哪個組的一部分(以便其他人在同一組,當你點擊一個關閉,而在其他組相同的頁面不受影響)。

b)是的,擁有相同的ID是無效的。我與助手應用程序有同樣的問題。它使整個頁面無效,至少對我來說,使任何JavaScript更困難。

不,你不需要身份證。但如果它們存在,它們應該是唯一的。此外,我不知道這整個「名字被棄用」的事情。其他形式將如何工作?表格不要在POST回時提交ID。請參閱http://www.w3.org/TR/html401/interact/forms.html#edef-INPUT

如果選擇指定ID,就可以在不影響group_processing不同。實際上,我通常會將它們命名爲「OrderOptions- <%= order.option.id%>」。

編輯:

PS:使用在http://validator.w3.org/#validate_by_uri+with_options HTML驗證。它會捕獲並通知您諸如重複ID或缺少ID等內容。它也會(如果我沒記錯的話)告訴你使用的已棄用的元素/屬性。

詹姆斯