.NET MVC Core使用jquery / ajax处理for循环中的表单 - 仅返回第一个选择

时间:2018-03-14 20:38:37

标签: c# jquery .net ajax

我可能很接近,但似乎无法弄清楚在这种情况下缺少什么。我有一个视图,在问题循环中创建一个表单,然后唯一必须选择的字段来自循环答案生成的单选按钮列表。

我正在使用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();
   }

1 个答案:

答案 0 :(得分:0)

执行此操作时:

$('#myForm').serialize(),

使用id="myForm"

序列化第一个对象

在你的循环中,你为所有表单提供相同的id,这就是为什么每次都返回第一个表单的原因

<form asp-action="Save" id="myForm">

不应该给它们和id,而应该给它们一个类,然后从单击的按钮中引用它们。这样的事情:

<form asp-action="Save" class="myForm">
$(this).closest('.myForm').serialize()