2016-07-01 44 views
2

使用MVC 5用剃刀(.cshtml)查看綁定動態添加控件列表 MVC - 在模型

你有值的需要最終得到從數據模型的列表在視圖中進行控制並將它們追加到列表中。

例如:

模型包含:public List<string> value { get; set; }

列表被允許含有高達70倍的值,但可以包含以下。

視圖你有一個按鈕,動態地將@Html.editorfor領域,就像這樣:enter image description here

爲創建的,它對應的值必須附加到List<string> value每個新領域。因此,在這個例子中,

,用戶點擊「添加域」,出現新的文本框,他進入「1號線」

  • 提交時,該字段將張貼到價值的第一指標名單像這樣:value[0] = "Line 1"

,用戶點擊「添加域」再添加其他價值 - 他進入「2號線」

  • 提交時,該字段將張貼到SE像這樣的值列表的COND指數:value[1] = "Line 2"

用戶可以到70場加起來(即他可以點擊「添加域」 65倍到65個值添加到值列表)

會是什麼是以這種方式綁定數據的最快速和最有效的方式?

+1

在你的按鈕'。點擊()'事件,只需動態添加''到DOM。如果集合是「字符串」(或任何其他簡單值類型)的集合,則不需要索引器 –

回答

4

提交之前,請確保這些動態添加的輸入有正確的模型名稱,你應該沒問題。因此,在您例如,它會與此類似:

<input type="text" name="value[0]" value="Line 1"/> 
    <input type="text" name="value[1]" value="Line 2"/> 
    <input type="text" name="value[3]" value="Line 3"/> 

而且模型綁定會自動創建的string與3個字符串(「1號線」,「2號線」,「3號線」)的列表在它們中並將其分配給相應的屬性,在這種情況下爲value

編輯:這裏是如何您激活addField功能可能看起來像要做到這一點:

function addField(){ 
    var addedFieldCount=$('input.dynamic-field').length; 
    if(addedFieldCount==70){//But you should check it on the server side too. 
     alert('No more field allowed'); 
     return; 
    } 
    $('#fieldContainer').append('<input name="value['+addedFieldCount+']"/>'); 
} 

這就是全部。如果你稱之爲硬編碼,那就去打電話吧。編輯2:正如Stephen Muecke指出的那樣,當你處理一組string時,你不需要索引器。 (我不知道那:))。所以你的功能變得更簡單:

function addField(){ 
    var addedFieldCount=$('input.dynamic-field').length; 
    if(addedFieldCount==70){//But you should check it on the server side too. 
     alert('No more field allowed'); 
     return; 
    } 
    $('#fieldContainer').append('<input name="value"/>'); 
}  
+0

也不知道用戶要輸入多少個字段,因此您不知道有多少個<<輸入鍵入=「文本」/>'放在視圖 –

+0

@ Collat​​eral.dmg,當我發佈我的答案,OP沒有提供任何更多的信息。他只需要將客戶端的值綁定到模型。 –

+0

此外,如果您希望內置模型綁定將DOM輸入值與模型值相匹配,您必須提供具有相應模型名稱的輸入的請求。客戶端的工作是確定如何填充這些輸入。爲了限制它們,在這種情況下,最多允許70個輸入,您可以使用客戶端或服務器端驗證或這兩者的組合。 –