2016-07-01 47 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个输入,您可以使用客户端或服务器端验证或这两者的组合。 –