0

私はこのような2つのモデルを持っています。

 public partial class Question
    {
        public int QuestionId { get; set; }        
        public string QuestionText { get; set; }
        public string Ans1 { get; set; }
        public string Ans2 { get; set; }
        public string Ans3 { get; set; }
        public string Ans4 { get; set; }
    } 
    public partial class UserAnswer
    {
        public int UserAnsId { get; set; }
        public Nullable<int> QuestionId { get; set; }
        public Nullable<int> UserId { get; set; }
        public Nullable<int> AnsVal { get; set; }        
    }

ご覧のとおり、QuestionId は両方のモデルにあります。ビューでレンダリングするにはどうすればよいですか。複数の質問があります。Question Moldel には初期実行時のデータがありますが、UserAnswer にはありません。

ビューで IEnumerable として使用できるように、これら 2 つのモデルをどのように組み合わせることができますか。Ans1、Ans2、Ans3、Ans4 にはテキストがあり、UserAnswer の AnsVal は Raiobutton から値を取得します。

4

2 に答える 2

2

以下のような結合クラスを作成します..これが完璧かどうかはわかりません..どんな提案も受け入れられます.

public class QuestionAnswerViewModel 
{ 
    public Question Question {get;set;}
    public ICollection<UserAnswer> Answers {get;set;}
}
于 2013-09-26T05:52:33.793 に答える
0

結合されたモデル オブジェクトを表す ViewModel を作成します。これにより、物事がきれいに保たれます。モデルは単なるモデルであり、ビューに渡されるものはモデルである可能性がありますが、多くの場合、ViewModel の概念により、コードを疎結合してきれいに保ちながら、設計が容易になります。これにより、View にとって重要ではないもの (モデル内の特定のプロパティなど) が方程式から除外されます。たとえば、CreatedDate を View に渡す必要はありません。ビューで使用されるため、ポストバックでは入力されません。これにより、ビューで使用されていないという理由だけで、CreatedDate の null 値でデータベースを更新する可能性があります。

ソリューションにモデル クラス ライブラリが含まれている可能性がありますか? その場合は、MyNamespace.Web.ViewModels などと呼ばれる別のクラス ライブラリを作成します。また、コントローラーへの View リクエストで ViewModel を設定し、コントローラーへの View ポストバックでモデルを設定する AutoMapper などのツールの使用を検討する必要があります。

于 2013-09-26T05:53:14.330 に答える