1

顧客にメールを送信するために書いているページがあります。メールを送信する顧客を選択する方法の 1 つは、顧客が持っている製品を選択することです。各製品には異なる詳細情報があり、製品に関する詳細を選択して、メールの送信先を絞り込むこともできます.

これは複雑になるため、コントローラー側で顧客の電子メール リストを作成する処理を行う必要がありますが、コントロールからすべてのデータを取得して手動で送信するのは悪夢です。

コントローラー側でモデルをビューに結び付け、データベースにクエリを実行し、電子メールのリストを送り返す AJAX 呼び出しを使用して、ビューで電子メール アドレスのリストを使用して Outlook をポップアップできるようにしたいと考えています。既に入力されています。データを使用してビューに戻る必要があるため、通常はモデルをコントローラーに取り込む方法であるフォーム ポストでこれを行うことはできないと思います。

誰かが私がこれを達成する方法を知っていますか?

人々が私のレイアウトを理解するのを助けるために私が試みなければならないいくつかのクラスがあります

public class ProductType
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [Required(ErrorMessage = "Please enter a product type description")]
    public string Description { get; set; }

    public virtual ICollection<ProductTypeDetail> ProductDetails { get; set; }
}

public class ProductTypeDetail
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int? ProductTypeID { get; set; }

    public ProductType ProductType { get; set; }

    [Required(ErrorMessage = "Please enter a description")]
    public string Description { get; set; }

    [Required(ErrorMessage = "Please enter a valid type")]
    public string Type { get; set; }

    public virtual ICollection<ProductTypeDetailValidValue> ValidValues { get; set; }
}

上記の 2 つのクラスは、任意の項目をいくつでも入力できる製品タイプ用です。製品の詳細は、製品について知っておく必要がある詳細情報です。たとえば、Vehicle Registration System の製品タイプを使用し、使用するかどうかを知る必要がある製品に関連する特定の輸入プロセスの製品詳細項目をその中に入れることができます。

public Customer()
    {
        SiteVisits = new List<SiteVisit>();
        Payments = new List<Payment>();
        Contacts = new List<CustomerEmail>();
    }

    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [Display(Name = "Name")] 
    [Required(ErrorMessage = "Please enter a customer name")]
    public string CustomerName { get; set; }

    [Display(Name = "Line 1")] 
    public string Address1 { get; set; }
    [Display(Name = "Line 2")] 
    public string Address2 { get; set; }
    [Display(Name = "Line 3")] 
    public string Address3 { get; set; }
    [Display(Name = "Line 4")] 
    public string Address4 { get; set; }

    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }


    [HiddenInput(DisplayValue = false)]
    [Required(ErrorMessage = "Please enter a customer type")]
    public int CustomerTypeID { get; set; }

    [Display(Name = "Type")] 
    public virtual CustomerType CustomerType { get; set; }

    [HiddenInput(DisplayValue = false)]
    [Required(ErrorMessage = "Please enter a customer status")]
    public int CustomerStatusID { get; set; }

    [Display(Name = "Status")]
    public virtual CustomerStatus CustomerStatus { get; set; }

    [DataType(DataType.MultilineText)]
    public string Comments { get; set; }

    [Required(ErrorMessage = "Please enter an expiration year")]
    public long ExpirationYear { get; set; }
    [Required(ErrorMessage = "Please enter an expiration month")]
    public long ExpirationMonth { get; set; }

    [Required(ErrorMessage = "Please enter a control name")]
    public string ControlName { get; set; }

    public Boolean Networked { get; set; }
    public long Population { get; set; }

    [Display(Name = "First Fiscal Month")] 
    public long FirstMonth { get; set; }

    [Display(Name = "FTP User Name")]
    public string FTPUserName { get; set; }

    [Display(Name = "FTP Password")]
    public string FTPPassword { get; set; }

    [Display(Name = "Customer ID")]
    public string CustomerUpdateID { get; set; }

    [DataType(DataType.Date)]
    [Display(Name = "Customer Since")] 
    public DateTime? StartDate { get; set; }

    public virtual ICollection<CustomerPhoneNumber> PhoneNumbers { get; set; }
    public virtual ICollection<CustomerProduct> Products { get; set; }
    public virtual ICollection<CustomerEmail> Contacts { get; set; }
    public virtual ICollection<SiteVisit> SiteVisits { get; set; }
    public virtual ICollection<Payment> Payments { get; set; }
}

public class CustomerProduct
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int? ProductTypeID { get; set; }

    public virtual ProductType ProductType { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int CustomerID { get; set; }

    public virtual Customer Customer { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int? VersionID { get; set; }

    public virtual ProductVersion Version { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int? StatusID { get; set; }

    public virtual ProductStatus Status { get; set; }

    public virtual ICollection<CustomerProductDetail> ProductDetails { get; set; }


}

 public class CustomerProductDetail
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int CustomerProductID { get; set; }

    public virtual CustomerProduct CustomerProduct { get; set; }

    [HiddenInput(DisplayValue = false)]
    public int ProductTypeDetailID { get; set; }

    public virtual ProductTypeDetail ProductTypeDetail { get; set; }

    //[Required(ErrorMessage = "Please enter a value")]
    public string Value { get; set; }


}

上記のように、顧客クラスがあります。各顧客は、設定した任意の数の製品タイプで設定でき、この特定の顧客に対してその製品タイプの製品詳細の値を選択できます。顧客には連絡先も含まれます。これは、電子メール アドレスを持つクラスです。

そのため、設定したすべての製品タイプを表示し、選択した製品の詳細項目の値を選択できる画面を表示する必要があります。次に、クエリを実行して、これに一致する顧客を見つける必要があります

4

1 に答える 1

1

私がする必要があったのは、フォームをシリアル化し、それを ajax 呼び出しでデータとして渡すことだけでした。呼び出されるコントローラー側にモデルと同じ型の引数がある場合、ビューはモデル バインダーに強く型付けされ、オブジェクトを自動的に入力するのに十分スマートです

于 2013-01-21T13:50:10.560 に答える