2015-02-01 2 views
2

MVC 및 면도기를 시작하면 데이터를 표시하는 데 문제가 있습니다. 컨트롤러가 UI에 표시하려고 할 때보기의 컬렉션 데이터 목록을 반환합니다. 속성을 표시합니다. 데이터 대신 이름. for exmaple @ Html.LabelFor (M => M [i] .Questions)는 질문 데이터를 표시하지만 대신 UI에 속성 이름을 표시한다고 가정합니다. 누군가 도와 주면 매우 유용 할 것입니다.면도날 값 대신 속성 이름을 표시

enter image description here

@model List<Question.Models.Questionnaire> 
    @using System.Linq 
    @{ 
    ViewBag.Title = "Index"; 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 

<h2>Question List</h2> 

@using(Html.BeginForm("GetAnswer","Home")) { 


for(int i = 0;i < Model.Count;i++) { 

    //<text>@Model[i].Questions</text> <br /> 

     @Html.HiddenFor(M => M[i].QuestionID) 
     **@Html.LabelFor(M =>M[i].Questions)** 

    if (@Model[i].MultipleChoice == false){ 

     @Html.TextBoxFor(M => M[i].Response) <br /> 

    } else { 

     for(int j = 0;j < Model[i].GetAns.Count;j++) { 
     <div> 
     <text>@Model[i].GetAns[j].AnsText</text> 
     @Html.RadioButtonFor(M =>M[i].Questions, Model[i].GetAns[j].AnswerId) 
     </div> 
     } 
     <br /> 
    } 
} 


    public class Questionnaire 
    { 
     public Questionnaire() { 
     } 

    public int QuestionID { get; set;} 
    public string Title { get; set;} 
    public string Questions{ get; set;} 
    public string Response { get; set;} 
    public string Response1 { 
     get; 
     set; 
    } 
    public bool MultipleChoice { get; set;} 

    public List<Answer>GetAns { set; get;} 

} 


public class QuestionRepository 
{ 

    public List<Questionnaire> 
     GetQuestionnaire() { 
      List<Questionnaire> q = new List<Questionnaire>(); 
      q.Add(new Questionnaire() { 
       QuestionID = 11, Title = "Geo", Questions = "Capital of England?", GetAns = GetAns(), MultipleChoice = false, Response1="TEST" 
      }); 
      q.Add(new Questionnaire() { 
       QuestionID = 22, Title = "Geo", Questions = "Capital of France", GetAns = GetAns(), MultipleChoice = false, Response1 = "TEST2" 
      }); 
      q.Add(new Questionnaire() { 
       QuestionID = 33, Title = "Geo", Questions = "Capital of Cuba", GetAns = GetAns(), MultipleChoice = true, Response1 = "TEST3" 
      }); 
      return q; 
    } 

    public List<Answer> GetAns() { 

     List<Answer> ans = new List<Answer>(); 
     ans.Add(new Answer() { AnswerId = 1, AnsText = "london", Ques = new Questionnaire() { QuestionID = 11 } }); 
     ans.Add(new Answer() { AnswerId = 2, AnsText = "paris", Ques = new Questionnaire() { QuestionID = 22 } }); 
     ans.Add(new Answer() { AnswerId = 3, AnsText = "Havana", Ques = new Questionnaire() { QuestionID = 33 } }); 

     return ans; 
    } 



} 


    public ActionResult Index() 
    { 

     var q = new QuestionRepository().GetQuestionnaire(); 

     return View(q); 
    } 
+0

사이드 노트 :'Questions'는 콜렉션처럼 느껴진다. 혼란스러운 이름이거나 어떤 종류의 콜렉션으로 렌더링해야한다 ... –

+0

@AlexeiLevenkov, [OP의 이전 질문] (http : // stackoverflow. com/questions/28254213/razor-binding-issue-with-radio-button), 더 혼란 스럽습니다. –

답변

4

@Html.LabelFor()은 속성의 이름 (또는 [Display(Name="...")] 의해 정의 된 값)의 속성이 아닌 값을 표시한다. 당신이 값을 표시 할 경우, Html.LabelFor()가하는 일입니다

@Html.DisplayFor(m =>m[i].Questions) 
+0

.LabelFor()는 Label 요소를 추가합니다. –

4

를 사용합니다. 입력 요소 옆에 레이블을 만들려는 것입니다. 레이블에는 필드 이름이 있고 입력 요소에는 값이 있습니다.

입력 요소에 값을 사용하려면 Html.TextBoxFor()과 같은 값을 사용하십시오. 또는 Html.DisplayFor()을 사용하여 일종의 표시 요소를 만들 수 있습니다. 방금 마크 업에 방출되는 값을 원하는 경우 또는, 단지 직접 방출 :

@model.SomeProperty 

당신은 단지에 직접 마크 업의 일부를 결합, 값을 직접 방출하는 HTML 헬퍼 메소드를 사용할 필요가 없습니다 모델.

관련 문제