C# 如何将MVC复选框绑定到模型
我有一个输出问题列表的视图。用户将选择他们希望包含在报告中的问题,然后提交表单 我的观点是:C# 如何将MVC复选框绑定到模型,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个输出问题列表的视图。用户将选择他们希望包含在报告中的问题,然后提交表单 我的观点是: @using (Html.BeginForm("Step6", "Home", FormMethod.Post)) { @Html.HiddenFor(m => m.EventID) @Html.HiddenFor(m => m.CompanyID) foreach (var item in Model.Questions) { <div class="ch
@using (Html.BeginForm("Step6", "Home", FormMethod.Post))
{
@Html.HiddenFor(m => m.EventID)
@Html.HiddenFor(m => m.CompanyID)
foreach (var item in Model.Questions)
{
<div class="checkbox">
<input type="checkbox" id="@item.QuestionID" name="QuestionIds" value="@item.Title" />
<label for="@item.QuestionID">@item.Title</label>
</div>
}
<p><input type="submit" class="btn btn-primary" value="Submit" /></p>
}
<div class="checkbox">
<input type="checkbox" id="12" name="QuestionIds" value="Would you like an account manager to contact you?" />
<label for="12">Would you like an account manager to contact you?</label>
</div>
<div class="checkbox">
<input type="checkbox" id="13" name="QuestionIds" value="Comments - please be as detailed as possible." />
<label for="13">Comments - please be as detailed as possible.</label>
</div>
控制器动作
[HttpPost]
public ActionResult Step6(Models.EventCompanyQuestionnaireQuestions model)
{
return View();
}
模型:
public class EventCompanyQuestionnaireQuestions
{
public int EventID { get; set; }
public int CompanyID { get; set; }
public List<Guid> QuestionIds { get; set; }
}
提交表单时,列表为空的初始化列表。呈现的表单元素名为QuestionID,它与模型匹配。我需要问号来选中复选框。您需要使用索引表达式:
@using (Html.BeginForm("Step6", "Home", FormMethod.Post))
{
@Html.HiddenFor(m => m.EventID)
@Html.HiddenFor(m => m.CompanyID)
for( Int32 i = 0; i < this.Model.Questions.Count; i++ )
{
<div class="checkbox">
@Html.CheckBoxFor( m => m.Questions[i].Selected )
@Html.LabelFor( m => m.Questions[i].Selected, this.Model.Questions[i].Title )
</div>
}
<p><input type="submit" class="btn btn-primary" value="Submit" /></p>
}
请注意,理想情况下,应该同时包装和文本。我也改为:
这是我的模型:
public class Question
{
public int QuestionID { get; set; }
public string Title { get; set; }
public bool Selected { get; set; }
}
public class EventCompanyQuestionnaireQuestions
{
public int EventID { get; set; }
public int CompanyID { get; set; }
public List<Question> Questions { get; set; }
}
以下是视图:
@using (Html.BeginForm("Edit", "Question", FormMethod.Post))
{
@Html.HiddenFor(m => m.EventID)
@Html.HiddenFor(m => m.CompanyID)
for (int i = 0; i < this.Model.Questions.Count; i++)
{
<div class="checkbox">
@Html.HiddenFor(m => m.Questions[i].QuestionID)
@Html.CheckBoxFor(m => m.Questions[i].Selected)
@Html.DisplayFor(m => m.Questions[i].Title)
</div>
}
<p><input type="submit" class="btn btn-primary" value="Submit" /></p>
}
用于测试的控制器:
// GET: Question
public ActionResult Index()
{
EventCompanyQuestionnaireQuestions model = new EventCompanyQuestionnaireQuestions
{
CompanyID = 1,
EventID = 2,
Questions = new List<Question>
{
new Question { QuestionID = 1, Selected = false, Title= "What is your name" },
new Question { QuestionID = 2, Selected = false, Title= "How old are you" },
new Question { QuestionID = 3, Selected = false, Title= "Where are you from" },
new Question { QuestionID = 4, Selected = false, Title= "What is your profession" },
}
};
return View(model);
}
[HttpPost]
public ActionResult Edit(EventCompanyQuestionnaireQuestions model)
{
var ids = model.Questions.Where(q => q.Selected).Select(q => q.QuestionID).ToList();
if(ids!=null && ids.Any())
{
foreach (var id in ids)
Debug.WriteLine(id);
}
return View();
}
以下是我从Visual studio获得的结果:
谢谢。这在CheckBoxFor行上给出了一个错误-无法将类型question隐式转换为boolI向问题项添加了一个选定的属性,在CheckBoxFor行中使用了该属性。QuestionID现在在中设置为空action@andrewb我已经修改了我的答案。问题仍然存在null@andrewb改变你的viewmodel设计,你不需要一个单独的问题ID列表。关于这个问题有很多答案
@using (Html.BeginForm("Edit", "Question", FormMethod.Post))
{
@Html.HiddenFor(m => m.EventID)
@Html.HiddenFor(m => m.CompanyID)
for (int i = 0; i < this.Model.Questions.Count; i++)
{
<div class="checkbox">
@Html.HiddenFor(m => m.Questions[i].QuestionID)
@Html.CheckBoxFor(m => m.Questions[i].Selected)
@Html.DisplayFor(m => m.Questions[i].Title)
</div>
}
<p><input type="submit" class="btn btn-primary" value="Submit" /></p>
}
// GET: Question
public ActionResult Index()
{
EventCompanyQuestionnaireQuestions model = new EventCompanyQuestionnaireQuestions
{
CompanyID = 1,
EventID = 2,
Questions = new List<Question>
{
new Question { QuestionID = 1, Selected = false, Title= "What is your name" },
new Question { QuestionID = 2, Selected = false, Title= "How old are you" },
new Question { QuestionID = 3, Selected = false, Title= "Where are you from" },
new Question { QuestionID = 4, Selected = false, Title= "What is your profession" },
}
};
return View(model);
}
[HttpPost]
public ActionResult Edit(EventCompanyQuestionnaireQuestions model)
{
var ids = model.Questions.Where(q => q.Selected).Select(q => q.QuestionID).ToList();
if(ids!=null && ids.Any())
{
foreach (var id in ids)
Debug.WriteLine(id);
}
return View();
}