【发布时间】:2021-09-02 12:55:14
【问题描述】:
我的 Web 应用程序中有一个用于评估的表单,它有几个问题,每个问题都有几个答案,应该由用户选择(单选按钮)。
我的模型看起来像:
public class EvaluationQuestionModel
{
public int Id { get; set; }
public string Title { get; set; }
public List<EvaluationAnswerModel> Answers { get; set; }
public int SelectedAnswer { get; set; }
}
(和我的 Answers 模型:
public class EvaluationAnswerModel
{
public string Title { get; set; }
public int Grade { get; set; }
}
)
我的看法是这样的:
@model List<EvaluationQuestionModel>
<form asp-controller="EvaluationQuestions" asp-action="SubmitSurvey">
@for (int i = 0; i < Model.Count(); i++)
{
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-12">
<label>@Model[i].Title</label>
</div>
<div class="col-lg-12 col-md-12 col-sm-12 col-12">
@for (int j = 0; j < Model[i].Answers.Count; j++)
{
<div class="form-check form-check-inline">
<input class="form-check-input" asp-for="@Model[i].SelectedAnswer" name="@Model[i].Id" type="radio" value="@Model[i].Answers[j].Grade">
<label asp-for="@Model[i].Answers[j].Title" class="form-check-label">@Model[i].Answers[j].Title</label>
</div>
}
</div>
</div>
<hr />
}
<div class="row no-block d-flex justify-content-center">
<input type="submit" value="Submit">
</div>
</form>
我似乎找不到将模型传递给我的控制器的方法。我想知道每个问题的答案,不知道是否有人可以帮助我。
//更新
我实际上通过两个修改解决了它:
- 像这样绑定输入:
[@i].SelectedAnswer而不是@Model[i].SelectedAnswer - 使用“name”属性而不是“asp-for”
【问题讨论】:
-
IEnumerable
? -
不,这无济于事。其实我是先用 IEnumerable 做的,然后用 List
. -
如何保持
object,然后检查它接收什么样的对象 -
我没明白你的意思。能说的具体点吗?
-
Object is supermost 类可以接收任何类型的子类型,包括 IEnumerable
或 List 所以如果你可以保持对象类型从 cshtml 接收控制器中的数据?那么您可以验证您收到的对象类型以进行进一步更改?
标签: asp.net asp.net-core