обрабатывать несколько элементов управления с одинаковым именем в коллекции форм - PullRequest
1 голос
/ 29 апреля 2011

В моем приложении 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 возвращает значение, разделенное запятыми, когда существует несколько текстовых полей с одинаковыми именами, поскольку я различаю текстовые поля только с разными идентификаторами.

Проблема заключается в том, что администратор вводит пользовательские комментарии, которыеимеет запятую (,) в этом комментарии, тогда значение формы _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"

Hoмы можем справиться со сценарием, как этот.

Ответы [ 2 ]

1 голос
/ 10 мая 2011

Похоже, вы хотите связать коллекцию с моделью. Я рекомендую сделать это так, как Фил Хаак делает

0 голосов
/ 29 апреля 2011

Попробуйте установить атрибуты имен динамических элементов управления так же, как и идентификаторы (с индексом - ваш _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];
        }
...