![](/img/trans.png)
[英]How to send form to controller using ajax in asp.net core?
[英]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.