2012-12-27 3 views
0

내 MVC4 응용 프로그램의 컨트롤러에 게시 작은 객관식 설문에서 값을 받고 힘든 시간을 보내고 있습니다 후 :MVC4 : (radiobuttonlist 포함) 뷰 모델이 비어 HttpPost

모델은 다음과 같습니다

https://gist.github.com/973482 :

은 "Enum_RadioButtonList"
@model Models.Evaluation 

@using (Html.BeginForm("EvaluationB", "Evaluation", FormMethod.Post)) 
{ 
     @foreach (var item in Model.Question) 
      { 
       @Html.DisplayFor(model => item.Question) 
       @Html.EditorFor(model => item.Question, "Enum_RadioButtonList", new { Id = item.Id }) 
      } 
      @Html.Label("Remark") 
      @Html.TextAreaFor(model => model.Rem) 

       <input type="submit" value="Next" /> 
} 

는 여기에서 잡고 뷰입니다 :

public class Evaluation 
{ 
    public int Id { get; set; }  
    public IEnumerable<MultipleChoiceQuestion> Question { get; set; }  
    public Remark Rem { get; set; } 
} 

public class MultipleChoiceQuestion 
{ 
    public int Id { get; set; }  
    public string Question { get; set; }  
    public MultipleChoiceAnswer Answer { get; set; } 
} 

public enum MultipleChoiceAnswer 
{ 
    DISAGREE, 
    NEUTRAL, 
    AGREE, 
    NA, 
} 

이 (일부 마크 업을 떠나)보기입니다. 그것은 (그들의 MVC 4 쉬운 방법이어야한다 그래도)를 radiobuttonlist에 열거 값을 표시하는 가장 좋은 방법처럼 보인다

컨트롤러는 다음과 같다

public ActionResult EvaluationA() 
    { 
     Models.Evaluation evm = new Models.Evaluation(); 
     evm.Question = db.MultipleChoiceQuestions.ToList(); //feeding the View some predefined questions 
     return View(evm); 
    } 

    public ActionResult EvaluationB(Models.Evaluation ev) 
    { 
     if (ModelState.IsValid) 
     { 
      // TODO: save model 
      return View("EvaluationB", evm); 
     } 

     return View("EvaluationA", ev); 
    } 

질문

이보기에 잘로드 어떤 이유로 컨트롤러에 게시 된 모델은 HttpPost 이후에 비어 있으며, 이유를 이해하지 못합니다.

@Html.HiddenFor(model => model.Id) 

이 양식과 함께 게시 될 수 있도록 또한 ID가 있어야 질문의 내부 콜렉션의 각 : 나는 양식을 보지 못했다

+0

소스 HTML – Mediator

+0

변화를 추가하세요'보기를 반환 ("EvaluationB", EVM)'에'보기를 반환 ("EvaluationB을 ", ev); –

답변

0

필자의 설명에 따라 주문 번호와 이름 속성을 가져야 컬렉션에 콜렉션 요소의 이름을 바인딩 html 필드의 이름 지정에 사용되었습니다. 필자는이처럼 내보기를 추가하고 지금은 제대로 컨트롤러의 값을 읽을 수 있습니다

@for (int i = 0; i < 6; i++) 
    { 
    <tr> 
     <td> 
      @Html.DisplayFor(m => m.Question[i].Question) 
     </td> 
     <td class="mult_question"> 
      @Html.EditorFor(m => m.Question[i].Answer, "Enum_RadioButtonList") 
     </td> 
    </tr> 
    } 

<tr> 
    <td> 
     @Html.Label("Remark") 
     @Html.TextAreaFor(m => m.Remark) 
0

은 다음과 같은 아이디에 대한 매핑을 가지고있다. 각 질문에 대한 양식의 foreach 루프 내부에는 다음과 같이 입력 할 수 있습니다.

@Html.HiddenFor(model => item.Question.Id) 

또한이 모델에는 MultipleChoiceQuestion 유형의 컬렉션이 있습니다.

http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx

문제 : 모델은 좀 더 연구는이 게시물에 우연히 수행이 게시물 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

+0

안녕하세요, Abhijit, 빠른 답변에 감사드립니다. @Html.HiddenFor (model => model.Id)를 추가하는 것이 도움이되지 않지만, 누락 된 ID는 올바른 방향입니다. 또한, 항목. 질문. 접근 할 수 없습니다. 필자 게시하고이 확인 될 것으로 보인다 된 내용 피들러로 보았다 : 1item.Question이 = 동의하지 & 2item.Question이 = 동의하지 & 3item.Question는 = 중립 및 4item.Question =이 동의 및 TL 병이 필 Haack 기사를 보라 – stefjnl

관련 문제