我不太确定如何使用ViewModel所以我需要一些关于以下问题的帮助:
我正在创建一个在线调查。 用户能够创建多项选择题。我用于此目的的域实体如下:
[Question]
int category_id { get; set; } // The category the question belongs to
int type_code { get; set; } // The type of question (I.E Multiple Choice)
string question_wording { get; set; } // The question itself
bool visible { get; set; } // Visiblity
int question_number { get; set; } // The number of the question
string help_text { get; set; } // Help text if the user doesnt understand the question
[Multiple_Choice_Question]
int choice_number { get; set; } // The order in which the MCQ answer possibility is shown
int choice_wording { get; set; } // The MCQ answer possibility
string help_text { get; set; } // help_text if the user doesnt understand the answer possibility
// This is a cross-reference table in my database that maps questions with choice possibilities
[Ref_Multiple_ChoiceAnswer]
int question_id { get; set; }
int mcq_id { get; set; }
在我的视图中,我需要能够同时创建问题和选择可能性(Multiple_Choice_Question)。用户将选择可能性写入文本框,每个文本框由一个新行分隔。
像
Cat
Dog
Mouse
既然我正在使用两个实体,那么我应该将所有必要的属性放在我的ViewModel中吗?每个答案可能性是我的数据库中的一个新行,并且在视图中它以字符串形式发回(文本框中的文本) - 我该如何解决这个问题?
如何在[HttpPost]上使用AutoMapper将问题中的属性与新的问题对象绑定,并使用Multiple_Choice_Question对象绑定答案。另外,在Ref_Multiple_ChoiceAnswer表中映射两个新实体的最佳方法是什么?
提前致谢
答案 0 :(得分:0)
您不应该从视图模型绑定道具。它是如此设计。
这使设计更加朝向oop 应通过调用行为更改模型的状态。
E.g。而不是:
question.visible=questionViewModel.visible;
您应该使用:
class QuestionController{
ActionResult Hide(int question){
var q=find(question);
q.Hide();
return q.As<QuestionViewModel>();
}
}
class Question{
void Hide(){
Visible=false;
}
}
这就是为什么“绑定属性”没有意义。