我有一个动态填充的问题和答案列表。动态MVC RadioButton组选择的答案
两个问题:
- 的问题和答案回发后不显示
- 所选择的答案是缺少
视图模型
public class RegistrationViewModel : RegisterExternalLoginModel
{
//...etc...
public Question Question { get; set; }
public Answer Answer { get; set; }
public List<Question> Questions { get; set; }
public IList<Answer> PossibleAnswers { get; set; }
public List<SelectedAnswer> SelectedAnswers { get; set; }
public IList<SelectedAnswer> PreviousAnswers
{
set
{
foreach(Question q in Questions)
{
q.SelectedAnswers = value.Where(t => t.questionId == q.objectId).ToList() ;
}
}
}
}
所选答案WER
public Answer SelectedAnswer
{
get
{
if (SelectedAnswers != null && SelectedAnswers.Count > 0)
{
var answers = SelectedAnswers.Where(t => t.questionId == objectId);
if (answers.Count() == 1)
{
var result = Answers.Where(t => t.objectId == answers.First().answerId).First();
return result;
}
}
return null;
}
}
的ActionResult
public ActionResult CreateQuestions()
{
RegistrationViewModel vm = new RegistrationViewModel();
IQFacade facade = new QFacade(CreateUserContext(true));
//Questions and Answers
vm.Questions = facade.GetQuestions().ToList();
vm.PossibleAnswers = facade.GetPossibleAnswers();
return View(vm);
}
后
[HttpPost]
public ActionResult CreateQuestions(RegistrationViewModel vm)
{
var context = CreateUserContext(true);
try{
IQFacade f = new QFacade(context);
f.CreateSomething(vm.User.name, vm.etc, vm.SelectedAnswers);//Need all the answers here, but null
}
catch (Exception ex)
{
//error stuff, etc...
return View(vm);//the questions do not appear after this point. Do I need to bind them again from GetQuestions or shouldn't they still be a part of the vm object that I am returning?
}
}
return RedirectToAction("Index");
}
在视图中,我使用的编辑器模板
@Html.EditorFor(x => x.Questions)
模板
@foreach (var possibleAnswer in Model.Answers)
{
<div class="radio">
@Html.RadioButtonFor(question => question.SelectedAnswer, possibleAnswer.objectId, new { id = possibleAnswer.objectId })
<label for="@possibleAnswer.objectId">@possibleAnswer.text <span>@possibleAnswer.value</span></label> <p>@possibleAnswer.description</p>
</div>
}
一切工作的第一次,但不是回发后。我已阅读了几十个类似的SO帖子。我错过了什么?
1.你的财产'SelectedAnswer'没有一个setter。 2.你试图绑定到一个复杂的属性('Answer'),但单选按钮组只回发一个单一的值。你应该有'public int SelectedAnswer {get;组; }'。 – 2014-09-13 04:01:58
这个问题呢?我是否需要在错误捕获中创建另一个数据库调用GetQuestions(),或者是否应该在发布后将其保留填充? – User970008 2014-09-14 12:09:49
很多你在这里做的事情都令人困惑,例如你有一个'SelectedAnswers'集合 - 每个问题可以有多个答案吗?你也应该有简单的getter和setter来查看模型属性并将它们填充到控制器中,而不是在getter中。由于您似乎没有为这些问题渲染任何输入控件,因此他们不会被回发,并且您将需要再次获取它们(但是,这可能会更好地表现出明智的效果,而不是回馈大量额外的输入,以防万一 – 2014-09-14 12:44:06