c#
  • asp.net-mvc
  • formcollection
  • 2011-04-29 4 views 1 likes 
    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) 일으키는 문제

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

    는 관리자가 입력 (사례 2) :

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

    형태가 리턴 값

    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와 동일하게 설정하십시오 (index - your 's _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

    관련 문제