2010-03-23 1 views
0

내가하려는 것은 다소 기본이지만 내 사실이 섞여있을 수 있습니다. 모델로 사용자 정의 클래스가있는 세부 정보 페이지가 있습니다. 사용자 정의 클래스는 2 개의 사용자 정의 객체를 사용하며 또 다른 사용자 정의 객체는 2 중 하나의 속성을 사용합니다. 세부 정보 페이지는 상당한 양의 정보를 출력하지만 사용자가 주석을 게시 할 수 있습니다.asp.net mvc에서 2 개의 사용자 지정 개체를 사용하는 사용자 지정 모델 개체로 양식 컬렉션을 다시 바인딩하는 방법은 무엇입니까?

 [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Details(VideoDetailModel vidAndComment) { ....} 

게시 된 양식의 유일한 필드 CommentText 및 동영상 ID 있습니다 : 사용자가 포스트 버튼을 클릭하면 페이지는 다음과 같이 뭔가를 보이는 세부 정보 표시 작업에 게시됩니다. 다음은 VideoDetailModel의 모습입니다.

VideoDTO에는 몇 가지 속성이 있지만 필요한 것은 VideoId입니다. CommentDTO의 적절한 속성에는 CommentText (올바르게 게시 됨) 및 userId 속성이 포함 된 UserDTO 객체가 포함됩니다. CommentText 값 이외의 모든 것은 게시되지 않습니다. 또한 ascx 페이지에 다음 줄이 있지만 모델 값은 컨트롤러에 게시되지 않습니다.

Html.Hidden("Model.Video.VideoId", Model.Video.VideoId);  

여기에 무엇이 누락되어 있는지 잘 모르겠습니다. 나는 내가 필요한 속성을 위해 더 많은 양식 필드를 추가하면 게시 될 것이라고 생각하지만, CommentText에 대한 양식 입력 필드가 하나만 필요합니다. 페이지에 게시 된 동일한 Model 객체 값을 페이지에 게시하면 도움이됩니다.

여기에서 필요한 설명을 드리겠습니다. 나는 지금 무슨 일이 벌어지고 있는지를 놓치고있다. 이 솔루션은 오히려 간단처럼

UPDATE

좋아, 그것은 보인다. 폼의 중간에서 RenderPartial을 사용하는 것은 어떻게 든 폼이 html로 작성되는 방법에 문제가 있다고 생각합니다. 나는 정말로 사물을 왜 그리웠는지에 관해서는 손가락질 할 수는 없지만, 내 양식 전에 RenderPartial을 만든 다음 텍스트 입력 필드와 숨겨진 VideoId로 양식을 시작하면 기본 ModelBinder가 정상적으로 작동합니다. 양식을 시작하고 숨겨진 VideoId를 작성하고 여러 부분보기를 렌더링하고 내 CommentText 필드를 만든 다음 양식을 닫았습니다. CommentText 필드는 괜찮은 바인딩됩니다. 숨겨진 VideoId는 그렇지 않습니다. 어쩌면 RenderPartial 사용에 대한 어딘가의 규칙을 놓친 것 같습니다.

완성을 위해, 내가 렌더링 한 부분 뷰는 Comment 객체를 가져 와서 CommentText 데이터를 썼습니다. 이러한 객체 중 일부는 단일 Video 객체에 대해 존재합니다. 이 데이터는 모두 사용자 정의 유형이며 Model (모델)로 View (기본보기)로 전달되었습니다. 이 부분보기에는 양식이 없으며 데이터 입력 필드가 없습니다.

+0

숨겨진 필드 ID에만 "Video.VideoId"가 필요하다고 생각합니다. – Ryan

답변

1
난 정말 여기 철저하게 대답을하는보기 페이지 코드의 자세한 내용을 볼 필요가 거라고

그러나 당신이 게시 한 조각을 위해 :

Html.Hidden("Model.Video.VideoId", Model.Video.VideoId); 

정말해야합니다

Html.Hidden("Video.VideoId", Model.Video.VideoId); 

또는

Html.Hidden("vidAndComment.Video.VideoId", Model.Video.VideoId); 

어느 쪽이든 작동하지만 컨트롤러 동작이 단일 매개 변수. 기본 모델 바인더는 "Model"이라는 메서드 매개 변수를 찾거나 실패하면 VideoDetailsModel 클래스의 "Model"속성을 찾습니다. 존재하지 않으므로 "Model.Video.VideoId"를 아무 것도 바인딩 할 수 없습니다.

+0

나는 이것을 시도하고 그것은 작동하지 않았다. 정말 이상합니다. 디버그 모드에서 request.Form을 확인할 때 숨겨진 값이 전혀 게시되지 않는 것처럼 보입니다. Comment.CommentText 필드는 제출 된 것으로 만 표시됩니다. FormCollection에 매개 변수를 변경하지 않아 반환되는 내용을 확인했습니다. 나는 오늘 저녁에 그걸 나중에 시험해 보겠다. – jason

+0

실제 양식 내에서 Html.Hidden() 호출이 명백해 보일 수 있습니까? :) 폼 내부에 생성 된 HTML에 숨겨진 INPUT 필드가 있습니까? –

+0

이것은 문제의 일부 였지만 전부는 아닙니다. 나는이 질문에 가장 밀접하게 대답하는 b/c를 선택했습니다. – jason

0

MVC 사이트에 모델 바인딩 보안이 구현되어 있습니까? 무슨 뜻인지 설명하려면 this page을 살펴보고 "모델 바인딩 보안"끝 부분을 읽어보십시오. 코드 또는 global.asax 파일에있을 수 있습니다.

관련 문제