我有4个单选按钮(考试问题和4个选项可供选择)的网页。与下面的代码,我可以阅读用户点击按钮后的选项值。
我有两个问题:
- 为什么第一次加载页面时选中了所有单选按钮?
- 发帖后如何发现选中了哪个单选按钮?
谢谢!
StudentQuestions.cshtml
@page "{examId:int?}"
@model VerityLearn.WebUI.Pages.Questions.StudentQuestionsModel
@{
ViewData["Title"] = "StudentQuestions";
}
<div>
<form method="post">
@Html.LabelFor(model => model.QuestionViewModel.QuestionText);
<p>Select the correct option.</p>
int optionIndex = -1;
@foreach (OptionViewModel opt in Model.QuestionViewModel.Options)
{
optionIndex++;
@Html.RadioButtonFor(model => model.QuestionViewModel.Options[optionIndex], Model.QuestionViewModel.Options[optionIndex]);
@opt.OptionText<br />
}
<button type="submit" asp-route-questionIndex="@(Model.QuestionNdx + 1)" class="btn btn-primary @nextDisabled">Next</button>
</form>
</div>
StudentQuestions.cshtml.cs
public class StudentQuestionsModel : PageModel
{
//private readonly VerityContext _context;
private readonly SignInManager<VerityUser> _signInManager;
private readonly UserManager<VerityUser> _userManager;
private readonly IStudentQuesionsUOW _studentQuesionsUOW;
private readonly VerityLearn.DataAccess.VerityContext _context;
public StudentQuestionsModel(
VerityContext context,
SignInManager<VerityUser> signInManager,
UserManager<VerityUser> userMrg,
IStudentQuesionsUOW studentQuesionsUOW
)
{
_context = context;
_signInManager = signInManager;
_userManager = userMrg;
_studentQuesionsUOW = studentQuesionsUOW;
} // end public StudentQuestionsModel(VerityContext context, SignInManager<VerityUser> signInManager, UserManager<VerityUser> userMrg)
[BindProperty]
public QuestionViewModel QuestionViewModel { get; set; }
[BindProperty]
public Question Question { get; set; }
public async Task<IActionResult> OnPostAsync()
{
... Not sure what to do here ...
}
QuestionViewModel.cs
public class QuestionViewModel
{
public int QuestionId { get; set; }
public int ExamQuestionOrder { get; set; }
public string QuestionText { get; set; }
public bool? IsSingleSelection { get; set; }
public List<OptionViewModel> Options { get; set; }
}
3条答案
按热度按时间toe950271#
您感兴趣的是所选单选按钮的值。在我的演示中,为了简化起见,我假设它是一个id。假设单选按钮的名称为
AnswerSelectedId
,则在提交表单时将标记为AnswerSelectedId
的值回发到服务器。因此,您需要在模型中定义一个名为AnswerSelectedId
的属性,以便模型绑定能够匹配这两个属性。这里有一个快速的演示来展示你试图实现什么借用大量迈克布林德的答案。
StudentQuestions.cshtml.cs
StudentQuestions.cshtml
注意asp-for属性如何匹配页面模型中的属性AnswerSelectedId。
当您按下“提交”按钮时,表单数据将被发送到服务器。如果您使用“发送到服务器的表单数据”下的开发者工具,它将如下所示(取决于所选的值)
然后,模型绑定会将该值绑定到名为AnswerSelectedId的属性,然后您就可以在onPostAsync方法中访问它。
xmd2e60i2#
如果要使用单选按钮来表示互斥选项,则应通过应用相同的
name
属性值将它们分组在一起:您正在使用的Html helper为每个单选按钮生成不同的id和name属性值。我会避免在Razor Pages中使用Html helper,而使用标记helper:
更多信息:https://www.learnrazorpages.com/razor-pages/forms/radios
ubof19bj3#
我建议使用**Animated radios & checkboxes (noJS)**,它的动画效果非常好。你可以按照下面的步骤在你的Razor页面中使用它:
中央支助事务厅:
控制器:
视图: