【问题标题】:MVC RadioButtonFor How & What to POST back to ControllerMVC RadioButtonFor 如何和什么回传到控制器
【发布时间】:2014-01-02 16:01:07
【问题描述】:

C# 和 MVC 的新手,因此提前为发布可能很明显的内容道歉。我看过类似的答案,但仍然看不到应该如何使用 RadioButtonFor 中的值以及应该使用什么值才能发布回到控制器。

控制器

    [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 值传递回控制器,将不胜感激?

【问题讨论】:

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


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

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2015-04-20
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多