无法将复选框的选定值插入数据库,它永远不会命中我的帖子提交数据方法

本文关键字:我的 方法 数据 提交 永远 复选框 数据库 插入 | 更新日期: 2023-09-27 18:33:07

  • 我的控制器我似乎无法将submitdata方法绑定到带有id=answerA复选框的复选框。目前我只想插入一个值,稍后将调整以适应 3 个答案选项:

    [HttpPost]
    public ActionResult SubmitData(QuestionnareModels models)
    {
        using (QUESTIONNAREDataContext db = new QUESTIONNAREDataContext())
        {
            SubmitTable answerSubmit = new SubmitTable()
            {
                SubmitID = 1,
                CorrectAnswer = models.AnswerA
            };
            db.SubmitTables.InsertOnSubmit(answerSubmit);
            db.SubmitChanges();
        }
        return RedirectToAction("Index");
    }`
    
  • 我的视图,我从linq database中呈现复选框:

    <div class="container">
        <h2><mark>Questionnare system</mark></h2>
        @using (Html.BeginForm("uploadAnswer"))
        {
            foreach (var questionType in Model)
            {
                @questionType.Question
                <br/>
                <br/>
                <input type="checkBox" id="AnswerA" />
                @questionType.AnswerA
                <br />
                <input type="checkBox" id="AnswerB" />
                @questionType.AnswerB
                <br />
                <input type="checkBox" id="AnswerC" />
                @questionType.Answerc
                <br/>
                <br/>
            }
            <br />
            <button type="submit" class="btn btn-success" id="submitDataButton">Submit</button>
        }
     </div>
    

无法将复选框的选定值插入数据库,它永远不会命中我的帖子提交数据方法

您的代码存在多个问题,包括无效的 html(重复的 id 属性)、缺少name属性(表单中的任何内容都不会回发)、复选框使用不正确(未选中的复选框不会回发,因此无法知道哪个答案属于哪个问题)、回发到错误的方法并允许同一问题的多个答案。您需要创建表示要显示和编辑的内容的视图模型

查看模型

public class QuestionVM
{
  public int ID { get; set; }
  public string Text { get; set; }
  public int SelectedAnswer { get; set; }
  public List<AnswerVM> AnswerList { get; set; }
}
public class AnswerVM
{
  public int ID { get; set; }
  public string Text { get; set; }   
}

控制器

public ActionResult Create()
{
  List<QuestionVM> model = new QuestionVM();
  // populate your questions and the possible answers for each question
  return View(model);
}
[HttpPost]
public ActionResult Create(List<QuestionVM> model)
{
  // The model now contains the ID of each question and the ID of its selected answer
}

视图

@model List<QuestionVM>
@using(Html.BeginForm())
{
  for(int i = 0; i < Model.Count; i++)
  {
    @Html.HiddenFor(m => m[i].ID)
    @Html.DisplayFor(m => m[i].Text)
    foreach(AnswerVM answer in Model[i].AnswerList)
    {
      string id = "answerswer" + answer.ID; 
      @Html.RadioButtonFor(m => m[i].SelectedAnswer, answer.ID, new { id = @id })
      <label for="@id">@answer.Text</label>
    }
  }
  <input type="submit" value="Save" />
}

查看您的控制器代码,我怀疑您的数据库结构是错误的。您需要一个用于Questions的表(ID,文本等),一个用于Answers的表(ID,文本,问题ID等)和一个用于用户回答问题(例如)UserQuestionaires(UserID,QuestionID,AnswerID等)的表

<div class="container">
    <h2><mark>Questionnare system</mark></h2>
    @using (Html.BeginForm("SubmitData"))
    {
        foreach (var questionType in Model)
        {
            @questionType.Question
            <br/>
            <br/>
            <input type="checkBox" name="AnswerA" />
            @questionType.AnswerA
            <br />
            <input type="checkBox" name="AnswerB" />
            @questionType.AnswerB
            <br />
            <input type="checkBox" name="AnswerC" />
            @questionType.Answerc
            <br/>
            <br/>
           <button type="submit" class="btn btn-success" id="submitDataButton">Submit</button>
        }
        <br />
    }
 </div>

两个问题

  1. BeginForm 应该具有您在控制器中指定的方法或操作
  2. 提交按钮必须在表单内。
  3. 不应使用 ID。你必须使用名称。
如果我

了解您的问题,我可以看到html中的"表单"操作是"uploadAnswer",而您发布了"SubmitData"的操作方法代码。

那么,如果您将Html.BeginForm("uploadAnswer

")中的"uploadAnswer"更改为Html.BeginForm("SubmitData"),会发生什么,您是否能够点击控制器?

同样,为了正确的模型绑定,html 元素的名称和模型的属性名称应相同。因此,将html更改为:<input type="checkBox" name="AnswerA" id="AnswerA" />(假设"AnswerA"是问卷模型的属性。

如果要对集合进行模型绑定,请查看此处和此处。