1

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 から Score Controller に文字列を渡そうとしましたが、成功しませんでした。チェック済みの RadioButton 値を Controller に戻す方法を教えていただければ幸いです。

4

1 に答える 1

1

3 つの異なるプロパティを持つべきではなく、答えを含む単一のプロパティを持つべきです。これにより、ラジオ ボタンをグループ化し、そのうちの 1 つだけを選択できるようになります。

@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 を値として使用し、サーバー上でこれが質問に対する正しい回答であるかどうかを比較できます。

于 2014-01-02T16:17:38.167 に答える