我正在構建一個問題。它一次顯示兩個問題。問題可以是不同的類型。例如,多項選擇問題和「矩陣」問題,其中有許多行和列需要回答。當視圖需要基於條件的不同視圖模型時,如何建模ViewModel?
我目前沒有使用的ViewModels,只是實體模型(我知道我不應該這樣做)..的代碼來檢索的問題清單
:
public ActionResult QuestionList(int categoryId, int page)
{
var questions = new PagedData<Question>();
questions.Data = db.Question.Where(c => c.category_id == categoryId).OrderBy(p => p.question_number).Skip(PageSize * (page - 1)).Take(PageSize).ToList();
questions.NumberOfPages = Convert.ToInt32(Math.Ceiling((double)db.Question.Where(cc => cc.category_id == categoryId).Count()/PageSize));
questions.CurrentPage = page;
questions.CategoryID = categoryId;
return PartialView("QuestionList", questions);
}
觀看起來是這樣的:
@model MvcApplication3.Helpers.Paging.PagedData<MvcApplication3.Models.Question>
@if (Model.Data.Count() == 0)
{
<h2>Denne kategori har ingen spørgsmål</h2>
}
else
{
<h2>@Model.Data.First().Category.category_name</h2>
<br />
<div>
Tryk for at komme videre til side:
@for (int i = 1; i <= Model.NumberOfPages; i++)
{
if (i == Model.CurrentPage)
{
@i
}
else
{
<a class="page-number" href="javascript:void();">@i</a>
}
}
</div>
<br />
foreach (var item in Model.Data)
{
if (item.visible == true)
{
String isAnswered = null;
if (item.Tabelform_Answers.Count() >= 1)
{
isAnswered = "answered";
}
else if(item.MCQ_Answers.Count() >= 1)
{
isAnswered = "answered";
}
else
{
isAnswered = "unanswered";
}
<div [email protected]>
@if (User.IsInRole("Administrator"))
{
@Html.ActionLink("[Rediger]", "Edit", "AdminQuestion", new { id = item.question_id }, null)
}
@Html.LabelFor(y => item.question_wording, item.question_wording, new { @class = "tooltip", title = @item.help_text })
@if (item.Question_Type.type_description == "Multiple Choice")
{
<br />
@Html.Partial("MCQDisplay", item)
}
else if (item.Question_Type.type_description == "Tabelform")
{
<br /><br />
@Html.Partial("GridDisplay", item)
}
</div>
<br />
}
}
}
@Html.HiddenFor(m => m.NumberOfPages)
@Html.HiddenFor(m => m.CategoryID)
@Html.HiddenFor(m => m.CurrentPage)
而不是發送整個問題的實體部分意見MCQDisplay和GridDisplay的,我想只發送數據neccecary。
這個視圖模型應該怎麼樣子的呢?
我的想法是爲每個類型的問題的列表,在主視圖模型,就像這樣:
List<MultipleChoiceViewModel> mcqlist;
List<GridQuestionViewModel> gridlist;
如果沒有在分類型選擇題的問題,該清單將是空而不是被使用。這是好的做法嗎?
,所以我不應該使用的ViewModels? – Nanek
是的,你應該。這就是爲什麼我說「然後推導出不同的視角模型」。不知道你如何推斷這意味着「不要使用視圖模型」 –
你可能提供一個快速的例子嗎? – Nanek