привет, ребята, у меня проблемы с моим приложением mvc. это простое приложение для викторины, и я застрял в создании представления для модели вопроса.
У меня есть модель вопросов и вариантов с соответствующими моделями представлений (в моем случае это QustionDTO и OptionDTO), и я хочу создать cshtml представление для вопроса со списком параметров. вот так, но когда я отправляю форму, мой список опций пуст. это моя модель вопросов и вариантов
public class Question
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string QuestionText { get; set; }
public virtual ICollection<Option> Options { get; set; }
}
public class Option
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[Display(Name ="Answer text")]
public string OptionText { get; set; }
[Required]
public bool IsCorrect { get; set; }
}
это мои модели DTO
public class QuestionDTO
{
public int Id { get; set; }
public string QuestionText { get; set; }
public List<OptionDTO> Options { get; set; }
}
public class OptionDTO
{
public int Id { get; set; }
public string OptionText { get; set; }
public bool IsCorrect { get; set; }
}
и это мое представление с шаблоном редактора, расположенным в "~/views/shared/editortemplate/OptionDTO.cshtml"
@model Quiz.BusinessEntites.QuestionDTO
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>QuestionDTO</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.QuestionText, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.QuestionText, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.QuestionText, "", new { @class = "text-danger" })
</div>
</div>
<table class="table" style="width:50%">
@for (int i = 0; i < 3; i++)
{
@Html.EditorFor(model=>model.Options[i])
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
это шаблон редактора OptionDTO
@using Quiz.BusinessEntites
@model Quiz.BusinessEntites.OptionDTO
<tr>
<th class="col-md-2">
@Html.DisplayNameFor(m => m.OptionText)
</th>
<th class="col-md-2">
@Html.DisplayNameFor(m => m.IsCorrect)
</th>
</tr>
<tr>
<td class="col-md-2">
@Html.EditorFor(m => m.OptionText)
</td>
<td class="col-md-2">
@Html.EditorFor(m => m.IsCorrect)
</td>
</tr>
на изображении выше вы можете видеть, что список опций равен нулю. если у вас есть какие-либо предложения, это будет оценено.
@Html.EditorFor(m =>m.Options)
и неfor
цикл (методEditorFor()
принимаетIEnumerable
и генерирует правильный html для каждого элемента в коллекции - person   schedule 25.08.2017