Как создать пользовательский интерфейс, позволяющий пользователю создавать параметры для вопроса? Представление (Form.cshtml) должно разрешать привязку переменного количества текстовых вводов (два или более в любое время) к переменному количеству @ Model.Options [i] .OptionText. Есть ли для этого разметка Razor или помощники тегов?
Причина, по которой существует класс «Option», заключается в том, что Entity Framework Core не позволяет сохранять коллекцию примитивных типов, включая строки.
Option.cs
namespace MyProject.Models
{
public class Option
{
public int OptionId { get; set; }
public string OptionText { get; set; }
public int QuestionId { get; set; }
public Question Question { get; set; }
}
}
Question.cs
namespace MyProject.Models
{
public class Question
{
public int QuestionID { get; set; }
public string Text { get; set; }
public ICollection<Option> Options { get; set; }
}
}
CreateQuestionModel.cs
public class CreateQuestionModel
{
[Required]
[UIHint("text")]
public string Text { get; set; }
[Required]
[UIHint("hidden")]
public int FormId { get; set; }
public ICollection<Options> Options{ get; set; }
}
Form.cshmtl
@model CreateQuestionModel
<form asp-controller="Form" asp-action="Options" method="post">
<div class="form-group">
<label asp-for="@Model.Text">Question name</label>
<input type="text" class="form-control" asp-for="@Model.Text">
</div>
<div class="form-group">
<label asp-for="@Model.Options"></label>
<input type="text" class="form-control" asp-for="???">
</div>
<div class="form-group">
<label asp-for="@Model.Options"></label>
<input type="text" class="form-control" asp-for="???">
</div>
<button type="submit" class="btn btn-primary">Create Options</button>
</form>
FormController.cs
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Options([Bind("Text, Choices")] Question question)
{
if (ModelState.IsValid)
{
context.Add(question);
await context.SaveChangesAsync();
return RedirectToAction("/");
}
return RedirectToAction("/");
}