На данный момент у меня есть рабочий прототип вопросника с несколькими вопросами и каждый вопрос, имеющий несколько вариантов ответа. Все отображает и экономит. Однако теперь я хотел бы сгруппировать вопрос/ответы в «разделы» в моем представлении «Редактировать». Я пробовал несколько разных методов, но ничего не работает правильно. Рабочий код без разделов следующим образом:EditorTemplates Где или Groupby на вопроснике
Редактировать Просмотр Отчет о прогрессе:
<div class="form-group">
@Html.LabelFor(model => model.ReportAnswers, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ReportAnswers)
</div>
</div>
ReportAnswers.cshtml (шаблон редактора)
<h3>
Question
</h3>
<p>
@Html.DisplayFor(x => x.Question.QuestionText)
</p>
@Html.HiddenFor(model => model.QuestionID)
@Html.HiddenFor(model => model.ReportID)
@foreach (var answer in Model.Question.PossibleAnswers)
{
var id = string.Format("answer-{0}", answer.AnswerID);
<p>
@Html.HiddenFor(model => model.ReportAnswerID)
@Html.RadioButtonFor(m => m.AnswerID, answer.AnswerID, new { id = id })
<label for="@id">@answer.AnswerText</label>
</p>
}
EditController:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(ProgressReport progressReport)
{
if (ModelState.IsValid)
{
db.Entry(progressReport).State = EntityState.Modified;
db.SaveChanges();
foreach (ReportAnswer answer in progressReport.ReportAnswers)
{
if (answer.QuestionID != null && answer.AnswerID != null)
{
db.Entry(answer).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("Index");
}
ViewBag.ClientID = new SelectList(db.Clients, "ClientID", "ID", progressReport.ClientID);
return View(progressReport);
}
структура данных Разделы -> Вопросы -> Ответы Я тогда есть таблица, которая имеет ProgressReport QuestionID и AnswerID
Я попытался GroupBy в поле зрения, но не знаете, как правильно называть Editortemplate. Фактически, я смог использовать его, но результат был не таким, как ожидалось. этот код:
@foreach (var group in Model.ReportAnswers.GroupBy(s => s.Question.SectionID))
Спасибо!
данных Структура сниппета:
Итак, вы говорите, что я должен отказаться от моего использования существующего шаблона редактора, который у меня есть сейчас? Кроме того, могу ли я использовать {get; set;} в viewmodel с первым приложением db? Думаю, я всегда думал, что для самой модели была модель с первым приложением? Или, может быть, это глупый вопрос? – Voyagr12
Кроме того, я думаю, я не думал о том, чтобы делать .GroupBy() в контроллере ... Наверное, я могу это сделать? – Voyagr12
Вы используете 'EditorTemplates' хорошо (и его легче читать, чем несколько вложенных циклов' for'). Но для того, чтобы представить то, что вы хотите отобразить в представлении, вам действительно нужно использовать модель представления, а не пытаться использовать ваши модели данных в представлении. В вашем случае у вас есть отчет, в котором содержится коллекция разделов, причем каждый раздел содержит сборник Вопросов, каждый из которых содержит набор возможных ответов. –