2015-02-01 2 views
2

Я просто запустил MVC и бритву, у меня возникла проблема с отображением данных, контроллер возвращает список данных коллекции в представлении, когда я пытаюсь отобразить в пользовательском интерфейсе, который показывает свойство вместо данных. для exmaple @ Html.LabelFor (M => M [i] .Questions), предположим, чтобы показать данные вопроса, но вместо этого он показывает имя свойства в пользовательском интерфейсе, я был бы очень благодарен кому-то, чтобы помочь мне.Razor, отображающий имя свойства вместо значения

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

Сторона примечания: 'Вопросы' чувствуют себя как коллекция - либо запутанное имя, либо вы должны представлять его как коллекцию какого-то рода ... –

+0

@AlexeiLevenkov, Если вы посмотрите на предыдущий вопрос [предыдущий вопрос] (http: // stackoverflow. com/questions/28254213/razor-binding-issue-with-radio-button), он становится еще более запутанным :) –

ответ

4

@Html.LabelFor() для отображения имени свойства (или значение, заданное [Display(Name="...")]), а не значение свойства. Если вы хотите, чтобы отобразить значение, а затем использовать

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

.LabelFor() также добавляет элемент Label, который может и не быть тем, что нужно. –

4

Вот что Html.LabelFor() делает. Он предназначен для создания метки рядом с элементом ввода, где метка имеет имя поля, а элемент ввода имеет значение.

Если вы хотите получить значение во входном элементе, вместо этого используйте что-то вроде Html.TextBoxFor(). Или вы можете использовать Html.DisplayFor() для создания элемента отображения. Или, если вы просто хотите значение, выбрасываемого в разметке, просто выбрасывают его прямо:

@model.SomeProperty 

Вам не нужно использовать методы HTML вспомогательные испускать значения непосредственно, просто связать эту часть разметки непосредственно модель.

Смежные вопросы