MVC RadioButtonFor How&什么回发到控制器

时间:2014-01-02 16:01:08

标签: c# asp.net-mvc-4 radiobuttonfor

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值是否可以传回控制器,我还是很感激。

1 个答案:

答案 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作为值,并且您可以在服务器上比较这是否是问题的正确答案。