2009-12-09 2 views
6

라디오 버튼 행렬로 구성된 mvc보기가 있습니다. 라디오 버튼의 각 행은 그룹에 있으며 모델의 입력 된 객체를 나타냅니다. 다양한 블로그 및 게시물의 지침을 사용하여 게시 된 양식 결과를 컨트롤러 작업의 형식화 된 모델 배열에 성공적으로 바인딩했지만 효과를 성공적으로 되돌리고 선택한 모델이나 선택되지 않은 상태를 유지하면서 기존 모델을 라디오 단추에 바인딩 할 수 없습니다 .형식의 모델을 사용하여 라디오 버튼 목록에 대한 모델의 양방향 데이터 바인딩 ASP.NET MVC

내 모델에는 0에서 4 사이의 "AnswerValue"라는 속성이 포함되어 있으며 라디오 버튼 이름과 일치해야합니다. 나는 모델 값 "AnswerId"로 인덱스 값을 변경해 보았지만 더 이상 작동하지 않는 바인딩이 작동합니다 (인덱스는 0 기반이어야한다고 생각합니다). 여기 내가 지금까지 사용했던 몇 가지 자료가 Post이고 Article by Scott Hanselman입니다.

누구든지이 양방향 바인딩을 수행하는 방법에 대한 통찰력이 있다면 크게 감사하겠습니다.

감사

내 컨트롤러 :

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Save([Bind(Prefix = "SurveyAnswer")] SurveyAnswer[] responses, int SurveyID) 
    { 

내보기 :

<% 
    int questionIndex = 0; 
    foreach (SurveyAnswer q in Model) 
    { 

%> 
    <%=Html.Hidden("SurveyAnswer.Index", questionIndex)%> 
    <%=Html.Hidden("SurveyAnswer["+questionIndex+"].AnswerId", q.AnswerId) %> 
    <tr> 
    <td style='background-color: #aaaaaa;padding-left: 10px; padding-right: 10px;border-right: solid 1px #fffff;'><%= questionIndex+1 %></td> 
    <td style='text-align: right;'><%= q.Question.DisplayValue %></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td> 
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td> 
    </tr> 
<% 
    questionIndex++; 
    } 
%> 

답변

6

자체가 참/거짓이 아닌 (국가의 관점에서) 값을 인식하지 못합니다 라디오 버튼. 따라서 실제 위치와 값을 비교하고 TRUE/FALSE 상태를 명시 적으로 설정해야합니다.

라디오 버튼 도우미가 너무 많이 사용되어보십시오.

<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", q.AnswerValue == 0)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", q.AnswerValue == 1)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", q.AnswerValue == 2)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", q.AnswerValue == 3)%> 
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", q.AnswerValue == 4)%> 

당신은 아마보기에이 대신 직접이 논리 질문 (q.AnswerValue == 4)를 넣어 더 나은하는 뷰 모델을 사용하는 경우.

PS : 나는 이미에 ID와 이름 부가 요소를 설정하는 첫 번째로 마지막 매개 변수를 제거 할 수 있다고 생각 : "SurveyAnswer[" + questionIndex + "].AnswerValue"

+1

내가 확장하기위한 좋은 방법이 될 것입니다 무슨 엔티티 프레임 워크와 생성 된 엔티티 집합의를 사용하고있는 경우 이것은 당신의 추천 된 논리를 유지하기 위해서입니다. 지금까지 도움을 주셔서 감사합니다. 일하는 것 같습니다. – Jeremy

+0

ViewModel 패턴을 사용하고 있지 않다면 컨트롤러의 로직을 변경하거나 뷰에서 관측 된 모델 유형 및 아마도 유효성 검사 프로 시저가 변경 될 수 있으므로이를 그대로 두는 것이 더 나을 것입니다. 복잡한 모델 (두 개 이상의 엔티티 세트가 하나의 형식으로 결합되거나 SelectList/RadioButtons/..을 설정하는 것과 같은)을 가지고있을 때 주로 사용됩니다.이 패턴을 더 확인하려면 http : //를 살펴보십시오. geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx 또는 ASP.NET MVC 1.0 Book의 ScottGu가 사용한 "ViewModel 패턴 사용"섹션. – JOBG