【问题标题】:handle multiple controls with same name in form collection处理表单集合中同名的多个控件
【发布时间】:2011-04-29 07:07:06
【问题描述】:

我的 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);
});

然后管理员添加用户名和cmets并提交。

提交时,我在控制器的操作中将其处理为:

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 的文本框。

问题是,当管理员在该评论中输入带有逗号(,)的 usercmets 时,表单值 _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"

我该如何处理这种情况。

【问题讨论】:

    标签: c# asp.net-mvc formcollection


    【解决方案1】:

    看起来您想将集合绑定到模型。我建议使用 Phil Haack does

    【讨论】:

      【解决方案2】:

      尝试设置与 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];
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 2017-08-04
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多