我可能很接近,但似乎无法弄清楚在这种情况下缺少什么。我有一个视图,在问题循环中创建一个表单,然后唯一必须选择的字段来自循环答案生成的单选按钮列表。
我正在使用jquery / ajax发布,以便页面不会在每次提交时重定向。我的代码工作在于,每次单击saveLink按钮时,它都会在数据库中创建一条新记录。问题是,当我为第一个问题选择答案时,它会保存该问题和答案的selectedquestionid和selectedanswerid,但是当我转到下一个问题并选择答案时,它会从第一个问题中保存ID并再次回答
我需要它来保存正确的ID。有人能指出我正确的方向吗?
查看(为简洁而简化)
@for int(i = 0; i < Model.Questions.Count; i++)
{
<form asp-action="Save" id="myForm">
<div class="form-group">
@Html.HiddenFor(model => model.TestName)
@Html.HiddenFor(model => model.SelectedQuestionID, Model.Questions[i].ID)
@Html.DisplayFor(model => model.Questions[i].QuestionText)
@for (int j = 0; j < Model.Questions[i].Answers.Count; j++)
{
<div>
@Html.RadioButtonFor(model => model.SelectedAnswerID, Model.Questions[i].Answer[j].ID)@Html.Label("", Model.Questions[i].Answers[j].AnswerText)
</div>
}
</div>
<div class="form-group">
<input type="button" class="saveLink" value="Save" />
</div>
</form>
}
<script type="text/javascript">
$('.saveLink').click(function(e){
e.preventDefault;
$.ajax({
url:$(this).attr("href"),
type:'POST',
data:$('#myForm').serialize(),
success:function(){
alert("Saved");
}
});
});
</script>
控制器方法
[HttpPost]
public void Save(RespVM respVM)
{
if (ModelState.IsValid)
{
var qid = _context.Answer.Where(a => a.ID == respVM.SelectedAnswerID).Select(a => a.QuestionID).FirstOrDefault();
var RespModel = new Resp
{
SelectedQuestionID = qid,
SelectedAnswerID = respVM.SelectedAnswerID,
TestName = respVM.TestName,
}
_context.Add(RespModel);
_context.SaveChanges();
}
答案 0 :(得分:0)
执行此操作时:
$('#myForm').serialize(),
使用id="myForm"
在你的循环中,你为所有表单提供相同的id,这就是为什么每次都返回第一个表单的原因
<form asp-action="Save" id="myForm">
不应该给它们和id,而应该给它们一个类,然后从单击的按钮中引用它们。这样的事情:
<form asp-action="Save" class="myForm">
$(this).closest('.myForm').serialize()