У меня есть модель 2: вопрос и ответ, например ниже, я хочу отправить модель списка для просмотра, а при отправке формы я отправлю модель списка контроллеру, но в действии UpdateQuestion a может получить список вопросов, но списка ответов не было. Можете ли вы объяснить и показать мне, как получить список ответ на каждый вопрос, когда я отправить формуКак передать список <model> контроллеру в MVC 4
public class Question
{
[Key]
public int Id { get; set; }
[ForeignKey("QuestionType")]
public int QuestionTypeId { get; set; }
public virtual QuestionType QuestionType { get; set; }
[ForeignKey("Field")]
public int FieldId { get; set; }
public virtual Field Field { get; set; }
public string Brief { get; set; }
public bool IsGroup { get; set; }
[ForeignKey("QuestionGroup")]
public int? QuestionGroupId { get; set; }
public virtual QuestionGroup QuestionGroup { get; set; }
public int Priority { get; set; }
public int Order { get; set; }
public virtual ICollection<Answer> Answers { get; set; }
}
и:
public class Answer
{
[Key]
public Int32 Id { get; set; }
[Column(TypeName = "ntext")]
[MaxLength]
public string Content { get; set; }
[ForeignKey("Question")]
public int QuestionId { get; set; }
public virtual Question Question { get; set; }
public float Mark { get; set; }
public int Priority { get; set; }
}
У меня есть индекс контроллера для прохождения списка Вопрос для просмотра:
public ActionResult Index()
{
ApplicationDbContext db = new ApplicationDbContext();
var listQuestion = db.Questions.ToList();
return View(listQuestion);
}
[HttpPost]
public ActionResult UpdateQuestion(string submit, List<Question> Questions)
{
...
return RedirectToAction("Index");
}
И на виду:
@model List<Question>
@{
int i = 0;
int j = 0;
}
@using (Html.BeginForm("UpdateQuestion", "TestRoom"))
{
<ul>
@foreach(var question in Model)//Question
{
<li>
@Html.Hidden("Questions["+i+"].Id", question.Id)
@{i++;}
@Html.Raw(question.Brief)
<ul>
@foreach (var answers in question.Answers)
{
<li>@Html.RadioButton("Questions["+i+"]_Answers["+j+"]",answers.Id)
@Html.Raw(answers.Content)
@{j++;}
</li>
}
@{j = 0;}
</ul>
</li>
}
</ul>
<div class="aq-button-panel">
<button type="submit" value="Finish" name="submit"><i class="icon-pencil"></i>Submit</button>
<button type="submit" value="Back" name="submit">Go Next <i class="icon-arrow-left"></i></button>
<button type="submit" value="Next" name="submit">Go Back <i class="icon-arrow-right"></i></button>
</div>
}
Большое вам спасибо, я сделал это. Но другой вопрос, если у вопроса есть более одного ответа. Так вы можете сказать мне, как это сделать что ? – Phuong
В этом случае ваша модель 'AnswerVM' будет иметь дополнительное свойство' bool IsSelected', а затем создать 'EditorTemplate' для' AnswerVM', который будет иметь скрытый ввод для 'ID' и флажок, привязанный к свойству' IsSelected' ,Внутри 'QuestionVM' замените' @ foreach', который генерирует радиокнопки с помощью '@EditorFor (m => m.PossibleAnswers)', который теперь генерирует флажок для каждого ответа. Обратите внимание, что 'int SelectedAnswer' больше не требуется. –
Если, с другой стороны, вы хотите иметь разные типы вопросов, где некоторые из них имеют множественный выбор (например, переключатели), некоторые из них позволяют просто текстовый ответ, некоторые из них позволяют давать ответы «Да/Нет» и т. Д., Тогда вам нужна серия различных моделей просмотров - скажем, 'MultipleChoiceQuestionVM', YesNoQuestionVM' и т. д., а затем у вас в главной модели будут коллекции этих (скажем)' QuestionaireVM', которые содержат 'List' и т. д. –