我有一個動態填充的問題和答案列表。動態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