2010-07-08 6 views
7

정수 목록에 의존하는 동작이 있습니다. 나의 첫 번째 본능은 단순히 List로 액션을 선언하는 것이었다. 그것이 내가에 중단 점을 넣을 때 목록이 비어 컴파일하지만정수 목록을 MVC 작업에 전달하는 방법은 무엇입니까?

<%= Html.ActionLink("EditMultiple", "EditMultiple", new { ids = new List<int> {2, 2, 2} })%> 

: 그래서 같은

public ActionResult EditMultiple(List<int> ids) 

내보기 통화 :

나는대로 컨트롤러에 액션을 선언 시도 동작. 왜 다른 사람이 알고 있고 대체 방법이 있습니까?

시나리오에 대한 자세한 내용을 추가 : 나는 동시에 "편집"여러 기관에 노력하고

. 이미 도서관의 책에 대한 정보를 만들고 편집하고 볼 수있는 응용 프로그램이있는 시점에 있습니다. 사용자가 한 권의 책에 대한 정보를 편집하여 데이터베이스에 저장할 수있는 부분보기가 있습니다.

이제 사용자가 단일 제출 버튼을 사용하여 여러 도서에 대한 정보를 편집 할 수있는보기를 만들고 싶습니다. 나는 각각의 책 (이보기에 대한 나의 모델은 List 임)을 부분적으로 렌더링하는 EditMultiple 액션을 만들고 이후에 제출 버튼을 추가한다.

+0

조치에 어떤 내용을 게시하고 있습니까? –

+0

이 경우 위의 예제는 실제 시나리오와 다소 비슷합니다. 이것은 POST가 아니라 GET입니다. 실제 시나리오에 대한 자세한 정보로 설명을 업데이트하겠습니다. – Justin

답변

4

예. 기본 모델 바인더는 "ids"를 모든 ICollection에 바인딩 할 수 있습니다. 하지만 같은 이름의 매개 변수를 여러 개 제출해야합니다. 이렇게하면 도우미 메서드 인 "ActionLink"를 사용하지 않아도됩니다. 당신과 같이 링크에 ID를 URL 도우미 액션을 사용하여 추가 할 수 있습니다 :

<a href="<%= Url.Action("CreateMultiple")%>?ids=2&ids=1&ids=3">Test link</a> 

Here's the link을 Haack의 블록에서.

+0

그게 효과가 있습니다. Html 도우미를 사용하지 않지만 하드 코딩 된 값은 프로토 타이핑 용이므로 트릭을 수행합니다. – Justin

2

나는

new List<int> {2, 2, 2} 

제대로 바인딩 인 POST로 변환됩니다, 당신은 또한, 메신저 확실하지, 내가 '돈 작동 할 수

Ids=1&Ids=2&Ids=3 

쉼표로 분리 된 목록을 보낼 것 같아요 진절머리 나는 기본 모델 바인더를 사용하십시오.

어쨌든 왜 그렇게하고 있습니까? 그게 다른 것의 의사 코드가되기를 바랍니다.

+0

자세한 내용은 질문에 추가되었습니다. 물론 나는 실제로 책을 편집하는 것이 아니라이 토론의 목적을 위해 충분하다. EditMultiple을위한 액션을 만드는 것보다 여러 책을 편집하는 더 좋은 방법을 생각할 수 있다면 목록에있는 각 모델의 Partial을 렌더링하는 것보다는 모든 귀가 들려주세요. 이것은 프레임 워크와 디자인 패턴을 여전히 배우고 있기 때문에 이것이 내 첫 번째 MVC 앱입니다. – Justin

+0

따라서 클라이언트가 프로그래밍 방식으로 (FormUrlEncodedContent를 통해) 제출하는 MVC 작업에 제출하는 방법을 알아 내려고하는 미래의 사람들에게 주목하십시오. 즉, 루프를 통과하여 목록에 동일한 키를 추가한다는 것을 의미합니다 FormUrlEncodedContent를 다른 값으로 여러 번 생성하는 KVP 중 하나입니다 (모든 Dictionary 이후에 올바른 사전이 아니기 때문에 허용되고 작동됩니다) – neminem

관련 문제