C#和MVC的新手,所以提前道歉,发布可能很明显的内容。我看过类似的答案,但仍然看不出应该如何使用RadioButtonFor中的值,以便它可以被POST回到控制器。
控制器
[HttpPost]
public ActionResult Score(ExamViewModel exam)
{
const int AddCorrect = 1;
var correct = from c in db.Answers
where c.ID == 1
select c.CorrectAnswer;
if (ModelState.IsValid)
{
if (correct == exam.CorrectAnswer)
{
ViewData["message"] = "Correct Answer!";
return View("Results");
}
else
{
var feedback = from g in db.Questions
where g.ID == 1
select g.GrammarPoint;
ViewData["message"] = "That's not the right answer.";
ViewData["feedback"] = feedback;
return View("Results");
}
}
return View("Results");
和视图
@model AccessEsol.Models.ExamViewModel
@{
ViewBag.Title = "TakeTest";
}
<h2>TakeTest</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<div class="display-label">
<h3>Click the correct answer:</h3>
</div>
<div class="display-field">
<strong>@Html.DisplayFor(model => model.Text.Text )</strong>
</div>
@Html.DisplayFor(model => model.Foil1.Foil1)
@Html.RadioButtonFor(model =>model.Foil1, "Incorrect" )
@Html.DisplayFor(model => model.Foil2.Foil2)
@Html.RadioButtonFor(model => model.Foil2, "Incorrect" )
@Html.DisplayFor(model => model.Foil3.Foil3)
@Html.RadioButtonFor(model => model.Foil3, "Incorrect")
@Html.DisplayFor(model => model.CorrectAnswer.CorrectAnswer)
@Html.RadioButtonFor(model => model.CorrectAnswer, "Correct")
<p>
<input type="submit" value="Submit Answers" />
</p>
</fieldset>
}
我还尝试将一个字符串从CorrectAnswer传递到乐谱控制器而没有成功。如果你能指出如何检查RadioButton值是否可以传回控制器,我还是很感激。
答案 0 :(得分:1)
您不应该有3个不同的属性,而是包含答案的单个属性。这将允许您对单选按钮进行分组,并且只能选择其中一个:
@model AccessEsol.Models.ExamViewModel
@{
ViewBag.Title = "TakeTest";
}
<h2>TakeTest</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<div class="display-label">
<h3>Click the correct answer:</h3>
</div>
<div class="display-field">
<strong>@Html.DisplayFor(model => model.Text.Text)</strong>
</div>
@Html.DisplayFor(model => model.Foil1.Foil1)
@Html.RadioButtonFor(model => model.Answer, "1")
@Html.DisplayFor(model => model.Foil2.Foil2)
@Html.RadioButtonFor(model => model.Answer, "2")
@Html.DisplayFor(model => model.Foil3.Foil3)
@Html.RadioButtonFor(model => model.Answer, "3")
@Html.DisplayFor(model => model.CorrectAnswer.CorrectAnswer)
@Html.RadioButtonFor(model => model.Answer, "4")
<p>
<input type="submit" value="Submit Answers" />
</p>
</fieldset>
}
然后在您的控制器操作中检查发送的Answer
属性值是否是此问题的正确值。正如您从视图中看到的那样,我们对问题有多个答案,而值将是发送到服务器的内容。通常您将使用答案的ID作为值,并且您可以在服务器上比较这是否是问题的正确答案。