Я создаю приложение CRUD (ответы с несколькими вариантами ответов для формы), ответом на каждый вопрос может быть список флажков, переключателей, текстовых полей или сочетание двух элементов управления. Пожалуйста. Как мне отобразить CheckBox в Razor View и Как отобразить 2 типа элементов управления рядом и сохранить ответ пользователя?
Вот моя модель:
public class Question
{
public long Id { get; set; }
public string Title { get; set; }
public string Details { get; set; }
public bool HasMultiAnswers { get; set; }
public int NumberOfAnswers { get; set; }
public double TotalPoint { get; set; }
public String InputTypes { get; set; }
public System.Collections.Generic.List<Option> Options { get; set; }
}
public class Option
{
public int Id { get; set; }
public int Order { get; set; }
public string Details { get; set; }
public double point { get; set; }
}
Вот мой контроллер
public ActionResult Index()
{
var questions = _context.Questions.ToList();
var questionModel = new List<Question>();
questions.ForEach(q =>
{
var model = new Question
{
Id = q.Id,
Title = q.Title,
Details = q.Details,
HasMultiAnswers = q.HasMultiAnswers,
NumberOfAnswers = q.NumberOfAnswers,
InputTypes = q.InputTypes, //New Line
Options = _context.Options.Where(f => f.point == 10).ToList()
};
questionModel.Add(model);
});
return View(questionModel);
}
@using (Html.BeginForm("Save", "Home", FormMethod.Post))
{
<div class="jumbotron">
@for (int i = 0; i < Model.Count(); i++)
{
var inputTypes = Model[i].InputTypes.Split(',').ToList();
<p>@Model[i].Details</p>
for (int j = 0; j < Model[i].Options.Count; j++)
{
for (int x = 0; x < inputTypes.Count; x++)
{
if (inputTypes[x] == "TextBox")
{
@Html.TextBoxFor(u => Model[i].Options[j].Details, new { @class = "form" })
}
else if (inputTypes[x] == "CheckBox")
{
// @Html.CheckBoxFor(u => Model[i].Options[j].Details, new { @class = "form" }) // - Throws Error
}
else if (inputTypes[x] == "RadioButton")
{
@Html.RadioButtonFor(u => Model[i].Options[j].Details, new { @class = "form" })
}
}
}
}
</div>
}