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 类是针对产品类型的,人们可以输入任何内容,并且可以输入任意数量。产品详细信息是您可能需要了解的有关产品的详细信息。例如,您可以拥有车辆登记系统的产品类型,并在其中放置一个产品详细信息项目,用于与您需要知道他们是否使用的产品相关的特定进口流程。

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 回答