2012-06-06 2 views
0

동적으로 생성 된 양식에 mvc3을 사용하고 있으며 기본 modelBinder가 도움이되지 않습니다.mvc3 - 형식 생성 키 오버라이드

컨트롤 값과 관련된 폼 컬렉션 키를 제어하고 폼 컬렉션에 다시 게시하고 싶습니다.

controllerContext.HttpContext.Request.Form["IWantToSetThisKeyRightHere"] 

현재 이러한 키는 기본 모델 바인딩을 지원하기 위해 이해할 수없는 곳에서 자동으로 생성됩니다. 이는 어쨌든 작동하지 않습니다.

동적 양식이 게시 될 때 데이터를 추출하기 위해 내 자신의 사용자 정의 모델 바인더를 실험 할 수 있도록보기를 만들 때이 값을 어떻게 설정합니까?

감사합니다.

+1

"당신에게 효과가 없다면"그것은 당신이 아주 잘못한 것을하고 있기 때문에, 처음에 잘못해서 당신이 만든 문제를 해결하려고 더 잘못된 것을 시도하려고하기 때문입니다. 흐름과 함께가는 것이 훨씬 쉽습니다. 그래서 아마도 여러분은 여러분의 실제 문제가 프레임 워크와 싸우고 있기 때문에 해결하려고하는 부작용이 아니라 우리에게 말할 수 있습니다. 보기 및 조치 방법 모두에 대한 코드를 표시 한 다음 수행하려는 것을 설명하십시오. –

+0

@MystereMan 귀하의 관심에 감사드립니다. 나는 보통 그 말을하는 사람입니다. :-) 나의 이전 게시물은 내 문제의 직장에서 힘의 유형을 정리할 수 있습니다. [여기] (http://stackoverflow.com/questions/10915314/mvc3-implementing-a-variable-type-recursive-model-with-editors) 내 어려움은 모델의 역동적 인 특성에서 유래하는 것 같다. 함께 일해. 지금까지 제가 말할 수있는 것처럼, 모델 바인더는 그것을 처리 할 수 ​​없습니다. 하나의 기본 객체 또는 예쁜 플랫 콜렉션이 필요합니다. 나는 당신의 통찰력을 고대합니다. – Todd

+0

좀 더 정확한 예 (코드 포함)를 알려 주시면 알려 드리겠습니다. – Todd

답변

0

이전 질문에 따르면 문제는 그다지 복잡하지는 않습니다. 당신은해야 할 것보다 훨씬 더 어렵게 만들고 있습니다. 그냥 여기 추측

public class Container { 
    public List<Container> Containers {get;set;} 
    public Question Question {get;set;} 
} 

public class Question { 
    public List<Answer> Answers {get;set;} 
} 

그것의 자신의 개체를 필요로하고 질문은 답변을 포함 할 수 있도록은 응답 아마, 아무것도 포함 할 수 없습니다 : 당신이 필요로하는 다음과 같습니다 간단한 모델이다. 질문에 다른 질문이나 컨테이너가 포함될 수 있다면 조금 수정하여 문제를 해결할 수 있습니다.

특별한 모델 바인더가 필요하지 않습니다.

단일베이스에서 모든 개체를 상속 할 필요가 없으며 이상한 템플릿 선택기를 사용할 필요가 없습니다.

@model Container 

@Html.EditorFor(m => m.Containers) 
@Html.EditorFor(m => m.Question) 

EditorTemplates/Question.cshtml

@model Question 

@Html.EditorFor(m => m.Answers) 

EditorTemplates/Answer.cshtml

@model Answer 

// whatever your answer code is.. if you have multiple answer types then you 
// need a template for each type 
/

EditorTemplates Container.cshtml을 :

이 같은 일을하여이 작업을 수행 할

기본 MVC 템플리트 시스템이이 모든 것을 처리하고 모델을 모두 바인딩합니다. 모델을 뷰에 전달하기 전에 모델을 올바르게 인스턴스화하면됩니다.

+0

나는 * 근본적인 시스템과 조화를 이루기위한 솔루션 설계에 대한 일반적인 생각을 고맙게 생각하지만 동적 인 내 시스템의 요구 사항은 내가 변경할 수있는 것이 아니며 mvc3는이를 선반에서 처리 할 수 ​​없습니다. 수많은 유형별 목록이 포함 된 솔루션은 동적이지 않고 정보를 잃습니다. 예 : 하위 질문이 하위 컨테이너 ... 이전이나 이후로 이동합니까? 그럼에도 불구하고 응답 시간을내어 주셔서 감사합니다. 나는 해결하고자하는 문제를 해결했으며 아래에 답을 게시 할 것입니다 (더 많은 공간이있는 곳에). 좋은 하루 되세요. – Todd

+0

@ 토드 - 그렇다면 다른 문제에서 설명한 문제가 내 대답으로 해결되기 때문에 나는 당신의 문제를 이해하지 못한다고 생각합니다. 앞뒤에 제기하는 문제는 템플릿의 구현 세부 사항이며 다루기는 쉽지 않습니다. 당신이 설명하는 문제는 전혀 어려운 문제가 아니며, MVC의 기능을 잘 발휘할 수 있습니다. –

0

양식 컬렉션의 키는 input 요소의 name 속성에서 가져옵니다. 나는 html 도우미를 사용하고 이름 속성에 값을 전달하여이를 무시하려고했습니다. 이처럼

:

@{ var uniqueNameAttribute = new { name = Model.UniqueName };} 
@Html.TextBox(Model.MessageText, Model.Answer, uniqueNameAttribute) 

내가 (Model.UniqueName)을 설정하려고 한 이름 값은 동일하게 값을 다시 매핑 할 수 있도록 아마도 MVC에 의해 디자인 된 문자열을 덮어 쓸 수 있었다 게시물 이후의 modelBinding 중 모델 클래스.

내 시스템이 동적이므로 mvc에서 데이터를 다시 모델에 매핑 할 수 없습니다. 나는이 값을 제어하여 게시물에 을 수동으로 데이터를 매핑 할 수있게하려고했습니다.

해결책은 매우 간단했습니다. 이 아니라은 @ Html.TextBox 도우미를 사용하여 텍스트 상자를 생성하고 원하는 이름 속성을 사용하여 직접 만듭니다.

<input type="text" class="vmFreeTextAnswer" name="@Model.UniqueName" value="" /> 

게시 된 값을 동적으로 구조화 된 모델에 다시 게시 할 수 있습니다.