0
我正在填充一个包含动态数量的问题的“页面”,(可选)选项和用户答案。在调试过程中,我可以看到我的字段已填写完毕,但无论我尝试了什么,QuestionOptions都会填充为数组。语法来填充linq数组?
这是许多或无选项的一个问题,可以有许多对问题的回答,但每个用户ID只有1个。
这是我的获取查询;
[HttpGet]
public ActionResult ViewQuestion(int page = 1) {
var userId = User.Identity.GetUserId();
var question = (from q in db.Questions
join qo in db.QuestionOptions on q.Id equals qo.QuestionId
join r in db.Responses on q.Id equals r.QuestionId
where q.PageNumber == page && r.UserId == userId
select new GetQuestionViewModel
{
// DOESN'T WORK QuestionOption1 = qo.QuestionOption1.ToList<QuestionOption>(),
// DOESN'T WORK QuestionOption = qo.QuestionOptions.ToList<QuestionOption1>(),
QuestionOptionRanking = qo.QuestionOptionRanking,
Id = q.Id,
Options = q.Options,
QuestionTypeId = q.QuestionTypeId,
Question1 = q.Question1,
QuestionRanking = q.QuestionRanking,
Answer = r.Answer
}).ToList();
return View(question);
}
而这是我的ViewModel;
public class GetQuestionViewModel
{
public IEnumerable<Question> Questions { get; set; }
public IEnumerable<QuestionOption> QuestionOptions { get; set; }
public int PageNumber { get; set; }
public int Id { get; set; }
public Nullable<int> Options { get; set; }
public string QuestionOption1 { get; set; }
public Nullable<int> QuestionOptionRanking { get; set; }
public string Question1 { get; set; }
public int QuestionTypeId { get; set; }
public Nullable<int> QuestionRanking { get; set; }
public string Answer { get; set; }
}
该视图可容纳4个问题类型;
@using Microsoft.AspNet.Identity
@model IEnumerable<Template.Models.GetQuestionViewModel>
@{
ViewBag.Title = "View question";
Html.BeginForm("ViewQuestion", "Question", FormMethod.Post, new { @class = "form-horizontal", role = "form" });
}
@foreach (var q in Model) { var qtype = q.QuestionTypeId;
<div>
@Html.AntiForgeryToken();
<h1>@q.Question1</h1>
</div>
<hr />
<div class="form-group">
@switch (qtype)
{
case 1:
// Textbox
@Html.TextArea("Answer", new { @class = "form-control", rows = "4", col = "5" });
break;
case 2:
// Dropdown
<select class="form-control" id="Answer" name="Answer">
@foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
{
<option value="@item.QuestionOption1">@item.QuestionOption1</option>
}
</select>
break;
case 3:
// Checkbox
<div class="checkbox">
@foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
{
<input type="checkbox" name="Answer" value="@item.QuestionOption1" /> @item.QuestionOption1<br />
}
</div>
break;
case 4:
// Radio buttons
foreach (var item in q.QuestionOptions.OrderBy(o => o.QuestionOptionRanking))
{
<div class="radio">
<label>
<input type="radio" name="Answer" value="@item.QuestionOption1" />
@item.QuestionOption1
</label>
</div>
}
break;
}
</div>
<input type="hidden" name="QuestionId" value="@q.Id" />
<input type="hidden" name="UserId" value="@User.Identity.GetUserId()" />
<input type="hidden" name="page" value="@q.PageNumber" />
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Answer" />
</div>
</div>
任何人都可以发现我出错的地方吗?
在此先感谢。
你使用的是Entity Framework吗? –
是的,但我很新,可能没有正确实施它.. – Alex
“'在调试过程中,我可以看到我的领域填写'”,所以你的'问题'列表不是空的?你能显示你的'View'代码吗? – vutran