0

まず、ドロップダウン リストはそれぞれ独自の ViewModel で分離し、できれば部分ビューで出力する必要があることを知っています。

ただし、以下の問題を解決できる場合は、スーパークラス内の 2 つのクラスを使用して設計時にこれをコンパイルするのに問題がある理由を教えてくれます (同じ View.

以下のように記述されたスーパークラスがあるとします。

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using YeagerTechModel.DropDownLists;

namespace YeagerTechModel.ViewModels
{
    [DataContract]
    [Serializable]
    public partial class CustomerProjectDDL
    {
        [DataMember]
        public Customer Customer = new Customer();
        [DataMember]
        public ProjectName ProjectName = new ProjectName();
    }
}

ProjectName クラスの定義は次のとおりです。

namespace YeagerTechModel.DropDownLists

    {
        [DataContract]
        [Serializable]
        public partial class ProjectName
        {
            [DataMember]
            public Int16 ProjectID { get; set; }
            [DataMember]
            public String Name { get; set; }
        }
    }

上記を使用しようとすると、メソッドで以下の設計時のコンパイル エラーが発生します。 IEnumerable を実装します。」

public List<CustomerProjectDDL> GetProjectNameDropDownListVM()
        {
            try
            {
                using (YeagerTechEntities DbContext = new YeagerTechEntities())
                {
                    DbContext.Configuration.ProxyCreationEnabled = false;
                    DbContext.Database.Connection.Open();

                    var project = DbContext.Projects.Where(w => w.ProjectID > 0).Select(s =>
                        new CustomerProjectDDL()
                        {
                            ProjectName.ProjectID = s.ProjectID,
                            ProjectName.Name = s.Name
                        });


                    List<CustomerProjectDDL> myProjects = new List<CustomerProjectDDL>();

                    myProjects = project.ToList();

                    return myProjects;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
4

2 に答える 2

1

このような構文を使用できれば機能します

    new CustomerProjectDDL()
    {
        ProjectName = {ProjectID = s.ProjectID, Name = s.Name}
    });

これは、オブジェクトの初期化、特に初期化の順序に関係しています。ただし、オブジェクト初期化子が最初にデフォルトのコンストラクターを呼び出し、その後で値が割り当てられるため、これが発生する理由を理解できません。そして、私の知る限り、オブジェクトの初期化中に、コンストラクターが呼び出される前にインスタンスフィールドが初期化されるため、オブジェクト初期化子でアクセスしようとした時点で ProjectName プロパティが初期化されているはずです

于 2013-09-28T23:16:57.057 に答える