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();
}

上記のコードから、_frmUserCommentsIDが異なるテキストボックスのみを区別しているのと同じ名前のテキストボックスが複数ある場合、はコンマ区切りの値を返します。

問題は、管理者がそのコメント内にコンマ(、)を含むユーザーコメントを入力すると、フォーム値_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"

このようなシナリオをどのように処理できますか。

4

2 に答える 2

1

コレクションをモデルにバインドしたいようです。PhilHaackと同じようにすることをお勧めします

于 2011-05-10T05:56:30.363 に答える
0

IDと同じ動的コントロール名属性を設定してみてください(インデックス-yoursの_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];
        }
于 2011-04-29T07:48:37.763 に答える