Как отобразить различные элементы управления (CheckBox, RadioButton или TextBox) на основе возвращенного параметра в ASP.NET Razor Просмотр и сохранение ответа - PullRequest
0 голосов
/ 27 августа 2018

Я создаю приложение 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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...