#c# #asp.net #asp.net-mvc-4 #razor #model-binding
#c# #asp.net #asp.net-mvc-4 #razor #привязка модели
Вопрос:
Я создаю asp.net веб-приложение mvc. У меня есть следующая настройка, чтобы мое приложение могло задавать человеку вопросы с несколькими вариантами ответов.
public class NewPerson
{
public List <Question> Question {get; set;}
// and other properties
}
public class Question
{
public int QuestionId{get; set;}
public string QuestionText {get; set;}
public List<Answer> Answers {get; set;} //list of multi-choice answers
}
public class Answer
{
public int Answerid{get; set;}
public string AnswerText {get; set;}
}
В моем контроллере у меня есть экземпляр newPerson, который заполнен вопросами и ответами. Затем это отправляется в представление. Я хочу, чтобы мое представление отправляло эти данные обратно на контроллер post. Я попытался сделать это, используя привязку модели по умолчанию. Я попытался использовать метод, предложенный
http://www.c-sharpcorner.com/UploadFile/pmfawas/Asp-Net-mvc-how-to-post-a-collection /
В моем представлении razor у меня есть
@model MyProject.ViewModels.NewPerson
Следующий код позволяет связующему модели привязывать свойства QuestionID и questionText
for(int i = 0; i < Model.Questions.Count; i )
{
@Html.HiddenFor(modelItem => Model.Questions[i].QuestionId)
@Html.HiddenFor(modelItem => Model.Questions[i].QuestionText)
}
Я хотел бы сделать что-то подобное для списка ответов, но я не вижу способа это сделать. Любая помощь о том, как это сделать, была бы очень признательна!
Ответ №1:
Для доступа вам понадобится вложенный цикл for Questions[i].Answers[m]
@for (int i = 0; i < Model.Questions.Count(); i )
{
@Html.HiddenFor(modelItem => Model.Questions[i].QuestionText)
for (int m = 0; m < Model.Question[i].Answers.Count(); m )
{
@Html.HiddenFor(modelItem => Model.Questions[i].Answers[m].AnswerText)
}
}
Если у кого-то есть вопросы о том, как заполнить модель, сделайте это следующим образом
NewPerson model = new NewPerson();
model.Questions = (insert LinQ Query).ToList();
foreach(var item in model.Questions)
{
item.Answers = (insert LinQ Query).ToList();
}
Комментарии:
1. Идеально! Хотя, предположительно, вы имеете в виду m <Model.ListModel . Большое вам спасибо!
2. Да, я протестировал это со своими объектами, так что вы можете увидеть опечатку, думаю, я исправил все это сейчас