2011-04-29 52 views
1

我在我的asp.net mvc(C#)应用程序中处理一些动态控件。在窗体集合中处理具有相同名称的多个控件

上的按钮,点击“添加行”,我将动态现有表中添加一行如:

$('#btnAddMore').click(function() { 
    var _userBodyHtml = ''; 
    _userBodyHtml += '<tr><td><input type="text" name="UserName" id="UserName' + _userDynId + '" size="10" /></td>'; 
    _userBodyHtml += '<td><textarea name="UserComments" id="UserComments' + _userDynId + '" cols="60" rows="1"></textarea></td>'; 
    _userBodyHtml += '</tr>'; 
    _userDynId += 1; 
    $('#UserBody').append(_userBodyHtml); 
}); 

然后管理员将用户名和意见,并将其提交。

在提交时,我正在处理它在控制器的行动:

var _frmUserNames = new List<String>(form["UserName"].ToString().Split(',')); 
var _frmUserComments = new List<String>(form["UserComments"].ToString().Split(',')); 
if (_frmUserNames.Count > 0 && _frmUserComments.Count > 0) 
{ 
    List<UserComments> _userComments = Enumerable.Range(0, _frmUserNames.Count) 
     .Select(i => new UserComments 
     { 
      UserName = _frmUserNames[i], 
      UserComment = _frmUserComments[i] 
     }).ToList(); 
} 

从上面的代码中,_frmUserComments返回逗号分隔值时,有不止一个文本框具有相同的名称,因为我区分该文本框只能使用不同的ID。

问题是,当管理员输入在该评论中具有逗号(,)的用户评论时,则表单值_frmUserComments具有逗号分隔值并且将无效数据提供给列表。

当管理员进入(情况1),其是精细:

Sam   Logged on 12/10/2010 
David  Looking for enhancement 

形式值返回:

_frmUserNames = "Sam,David" 
_frmUserComments = "Logged on 12/10/2010,Looking for enhancement" 

当管理员进入(情况2),这是引起问题:

Sam   Logged on 12/10/2010 
David  Logged on 03/01/2011, Looking for enhancement 

表单值返回:

_frmUserNames = "Sam,David" 
_frmUserComments = "Logged on 12/10/2010,Logged on 03/01/2011, Looking for enhancement" 

我该如何处理这种情况。

回答

0

尝试设置与ID相同的动态控件名称属性(使用索引 - 您的_userDynId)。您可以通过表单收集器遍历,这样的事情(使用LINQ):

 foreach (var key in form.AllKeys.Where(k => k.StartsWith("UserName"))) 
     { 
      var index = key.Replace("UserName", ""); 
      var userName = form[key]; 
      var userComment = form["UserComments" + index]; 
     } 
1

看起来要绑定集合模型。我推荐你这样做Phil Haack does

相关问题