簡體   English   中英

如何使用 asp.net 內核中的 ajax 將用戶的 questionId 和答案發送到 controller

[英]How to send questionId and answer of user to controller using ajax in asp.net core

我正在嘗試將 questionIds 和用戶的答案保存到包含使用 ajax 的字典的 class 中。 這是 ViewModel class:

 public class AnswersVM
{
  public List<Dictionary<int, string>> group { get; set; }
  public List<Dictionary<int, string>> trueFalse { get; set; }
}

這是視圖:

<form id="QuestionsForm" asp-action="SubmitAnswers" asp-controller="Home" method="post" 
      enctype="multipart/form-data">
@foreach (var item in Model)
{
    <div class="col-lg-6">
            <p>
                <!--choice-->

                @if (item.choiceQuestionSelection.Any(q => q.QuestionId == item.QuestionId))
                {
                    foreach (var correct in item.choiceQuestionSelection.Where(q => q.QuestionId == 
                 item.QuestionId && q.IsTrue == true).Select(q => q.Choice))
                    {
                        <input type="hidden" data-correct="@i" value="@correct" />
                        <input type="hidden" name="group[@i]" value="@item.QuestionId" />
                    }
                    @foreach (var choice in item.choiceQuestionSelection)
                    {
                        <label>
                            <input type="radio" data-choice="@i" name="group[@i]" class="group" 
                   value="@choice.Choice">@choice.Choice
                        </label>
                    }

                    i++;

                }
                else
                @if (item.trueFalseQuestions.Any(q => q.QuestionId == item.QuestionId))
                {
                    <!--truefalse-->
                    foreach (var rightChoice in item.trueFalseQuestions.Where(q => q.QuestionId == 
               item.QuestionId).Select(q => q.IsTrue))
                    {
                        var convertRightChoice = Convert.ToString(rightChoice);
                        <input type="hidden" value="@convertRightChoice" data-true="@trueFalse" />
                        <input type="hidden" name="QIdTrueFalse[@trueFalse]" value="@item.QuestionId" 
                   />
                    }
                    @foreach (var question in item.trueFalseQuestions)
                    {
                        var convertToString = Convert.ToString(question.IsTrue);
                        <label>
                            <input type="radio" data-selection="@(trueFalse)" 
                name="trueFalse[@trueFalse]" class="trueFalse" value="صحیح">صحیح
                        </label>

                        <label>
                            <input type="radio" data-selection="@(trueFalse)" 
             name="trueFalse[@trueFalse]" class="trueFalse" value="غلط">غلط
                        </label>

                    }
                    trueFalse++;
                }
                else
                {
                    <input type="hidden" name="QIdDescriptive[@descriptive]" value="@item.QuestionId" 
                             />
                    <textarea class="descriptive" name="Descriptive" id="descriptive" 
         placeholder="پاسخ شما..."></textarea>
                    descriptive++;
                }
    
            </p>
        </div>
    </div>
    QuestionCount++;

  }
  <input type="submit" id="submitButton" name="submitButton" value="ارسال">
 </form>

這是我的 controller:

 [HttpPost]
    public string SubmitAnswers(AnswersVM userAnswers)
    {

        return "success";
    }

這是 ajax:

    $('#QuestionsForm').submit(function (event) {
        event.preventDefault();
        var frm = $(this);
        console.log(frm);
        console.log(frm.serialize());
        $.ajax({
            url: frm.attr('action'),
            method: "POST",
            data: frm.serialize(),

        }).done(function (res) {
            alert(res)
        });

    });

抱歉,我真的試圖根據我以前的問題自己弄清楚,但我找不到答案,我需要幫助。 當我運行它時,我在 controller 中得到 null。

List<Dictionary<int, string>>需要group[@i][@item.QuestionId]的類型。 第一個[]表示List的索引,第二個[]表示Dictionary的key。

改變它的看法。

@model IEnumerable<Question>
@{
  ViewData["Title"] = "ShowQuestions";
  Layout = "~/Views/Shared/_Layout.cshtml";
  var QuestionCount = 1;
  var i = 0;
  var trueFalse = 0;
  var descriptive = 0;
 }
<form id="QuestionsForm" asp-action="SubmitAnswers" asp-controller="Home" method="post"
  enctype="multipart/form-data">
@foreach (var item in Model)
{
    <div class="col-lg-6">
        <p>
            <!--choice-->

            @if (item.choiceQuestionSelection.Any(q => q.QuestionId == item.QuestionId))
            {
                foreach (var correct in item.choiceQuestionSelection.Where(q => q.QuestionId ==
                item.QuestionId && q.IsTrue == true).Select(q => q.Choice))
                {
                    <input type="hidden" data-correct="@i" value="@correct" />
                    @*<input type="hidden" name="group[@i0][]" value="@item.QuestionId" />*@
                }
                @foreach (var choice in item.choiceQuestionSelection)
                {
                    <label>
                        <input type="radio" data-choice="@i" name="group[@i][@item.QuestionId]" class="group"
                               value="@choice.Choice">@choice.Choice
                        </label>
                }

                i++;

            }
            else
            @if (item.trueFalseQuestions.Any(q => q.QuestionId == item.QuestionId))
            {
                <!--truefalse-->
                foreach (var rightChoice in item.trueFalseQuestions.Where(q => q.QuestionId ==
           item.QuestionId).Select(q => q.IsTrue))
                {
                    var convertRightChoice = Convert.ToString(rightChoice);
                    <input type="hidden" value="@convertRightChoice" data-true="@trueFalse" />
                    <input type="hidden" name="QIdTrueFalse[0][@trueFalse]" value="@item.QuestionId" />
                }
                @foreach (var question in item.trueFalseQuestions)
                {
                    var convertToString = Convert.ToString(question.IsTrue);
                    <label>
                        <input type="radio" data-selection="@(trueFalse)"
                               name="trueFalse[0][@trueFalse]" class="trueFalse" value="صحیح">صحیح
                    </label>

                    <label>
                        <input type="radio" data-selection="@(trueFalse)"
                               name="trueFalse[@trueFalse]" class="trueFalse" value="غلط">غلط
                    </label>

                }
                trueFalse++;
            }
            else
            {
                <input type="hidden" name="QIdDescriptive[@descriptive]" value="@item.QuestionId" />
                <textarea class="descriptive" name="Descriptive" id="descriptive"
                          placeholder="پاسخ شما..."></textarea>
                descriptive++;
            }

        </p>
    </div>
    
    QuestionCount++;

}
<input type="submit" id="submitButton" name="submitButton" value="ارسال">
</form>

然后你可以得到如下數據。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM