-
我的控制器我似乎无法将
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 = "answer" + 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>
两个问题
- BeginForm 应该具有您在控制器中指定的方法或操作
- 提交按钮必须在表单内。
- 不应使用 ID。你必须使用名称。
了解您的问题,我可以看到html中的"表单"操作是"uploadAnswer",而您发布了"SubmitData"的操作方法代码。
那么,如果您将Html.BeginForm("uploadAnswer")中的"uploadAnswer"更改为Html.BeginForm("SubmitData"),会发生什么,您是否能够点击控制器?
同样,为了正确的模型绑定,html 元素的名称和模型的属性名称应相同。因此,将html更改为:<input type="checkBox" name="AnswerA" id="AnswerA" />
(假设"AnswerA"是问卷模型的属性。
如果要对集合进行模型绑定,请查看此处和此处。