处理表单集合中同名的多个控件
本文关键字:控件 表单 集合 处理 | 更新日期: 2023-09-27 17:53:33
我有一个窗体在我的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
有逗号分隔的值,它给无效的数据列表。
当Admin进入时(情况1),这是好的:
Sam Logged on 12/10/2010
David Looking for enhancement
表单值返回:
_frmUserNames = "Sam,David"
_frmUserComments = "Logged on 12/10/2010,Looking for enhancement"
当Admin进入时(案例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"
我该如何处理这样的场景
看起来您想要将集合绑定到模型。我建议像Phil Haack那样做
尝试设置与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];
}