2013-07-27 2 views
0

ASP.Net MVC를 처음 사용합니다. 온라인 교육 시스템을 개발하여 MVC3을 배우려고합니다. 뷰 모델을 사용하여 뷰에서 컨트롤러로 생성 된 텍스트 상자 및 드롭 다운의 값을 전달하는 문제에 직면하고 있습니다. 학생에게 현재 자격증 명 목록을 추가하는 시나리오가 있습니다. enter image description hereasp.net의 뷰에서 컨트롤러로 자바 스크립트로 만든 컨트롤 목록의 값 전달

위의 그림에서 나는 내 문제를 설명하려고 노력했다.

처음에는 한 줄의 교육 만보기 페이지에서 볼 수 있습니다. 학생이 추가 버튼을 클릭하면 그 아래에 새 행이 추가됩니다.

저는 StudentEducation ViewModel을 만들었습니다. 나는 이와 비슷한 스택 오버 플로우에 대한 몇 가지 질문을 연구했다. 모두에서 나는 일반적인리스트 프로퍼티가 생성되고 루핑하여 컨트롤을 생성한다는 것을 발견했다. 그러나 문제는 처음에는 목록에 개체가 없기 때문에 학생이 추가 할 자격 수를 설정할 수 없습니다.

이 점에 대해 제발 도와주세요.

답변

0

당신이 당신의 사후 조치에 StudentEducation 라는 이름의 뷰 모델을 가지고 말할 수 있습니다, 당신은이 List<StudentEducation>

[HttpPost] 
public Action MyAction(List<StudentEducation> students) 
{ 
... 
} 

처럼 당신은 또한보기를 가져올 수있는 GET 작업이 필요합니다. 처음에는 비어 있고 레코드가 포함되지 않습니다.

public Action MyAction() 
{ 
    //here, initialize your 
    //List<StudentEducation> vm = new List<StudentEducation>(); 
    // and send it to view like 
    return View(vm); 
} 

강력한 형식의보기가 필요합니다. 보기에서 모델을 반복하고 목록 항목을 생성해야합니다.

@model IEnummerable<StudentEducation> 

for(var i=0;i<@Model.count;i++) 
{ 
    @Html.TextBoxFor(o=>o[i].PropertyName) 
} 

다음은 흥미로운 점입니다. 생성 된 HTML 마크 업 여기

<input type="text" value="something" name="[1].PropertyName" /> 

name="[1].PropertyName" 가장 중요한 것은이 같은 경우 목록은 제대로 바인딩합니다. 이 패턴의 이름을 가진 목록 HTML을 만드는 경우 양식 제출시 List<Studenteducatio>이 채워집니다.

+0

. 성공적으로 코드를 구현했습니다. –

0

기본적으로 목록에 모델 바인딩해야합니다. 자바 스크립트를 통해 테이블에 추가하는 각각의 새로운 행은 HTML 입력으로 설정된 올바른 ID를 가져야합니다.

나는 한동안 동일한 문제에 직면했고 this 필 하크의 기사를 통해이 문제를 해결할 수있었습니다.

사용자가 "추가"버튼을 눌렀을 때 사용하는 템플릿을 사용하여 새 행을 만들었습니다. (필자의 경우 여러 번 입력 할 수있는 전체 하위 폼 이었지만). 또한 삽입 할 행의 올바른 시퀀스 번호를 계산하는 JavaScript 도우미 함수를 구현했습니다. 컨트롤러에서 아무 것도 변경할 필요가 없었습니다. 모델 바인딩이 작동했습니다.

+0

감사합니다. Phil Hacck 기사를 읽은 후에 필자는 문제를 성공적으로 해결했습니다. 또한 부분보기를 작성하여 시도했습니다. 그러나 운이 없다. 제네릭 형식의 StudentEducationList 속성이있는 학생보기 모델이 있습니다. 내가보기로 그것을 반복하고 색인과 함께 부분보기 이름과 개체 모델로 html.partial를 호출합니다. 원하는 컨트롤을 만들었지 만 학생보기 모델로보기를 게시 할 때 목록 유형의 학생보기 모델에 속성이있는 학생용보기 모델의 값을 전달하지 않습니다. 부분 뷰 구현 코드를 보내 주시겠습니까?감사합니다. –

관련 문제