将模型传递给控制器​​并将结果发送到不使用表单提交的页面

时间:2013-01-11 17:18:20

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

我正在编写一个页面,向客户发送电子邮件。选择客户发送电子邮件的方法之一是选择他们拥有的产品。每个产品都有不同的详细信息,您还可以选择有关产品的详细信息,以缩小您的电子邮件地址。

因为这将变得复杂,我需要进行处理以在控制器端提出客户电子邮件列表,但尝试从控件中提取所有数据以手动发送给它是一件噩梦。

我想使用一个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; }
}

以上两个类别适用于某人可以输入任何内容以及任意数量的产品类型。产品详细信息是您可能需要了解的有关产品的详细信息。例如,您可以拥有车辆登记系统的产品类型,并将产品详细信息项放入其中,以用于特定的导入过程,该过程与您需要知道的产品有关。

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; }


}

所以上面我有客户类。可以使用您设置的任意数量的产品类型设置每个客户,并且可以为该特定客户选择该产品类型的产品详细信息的值。客户还包含联系人。这是具有电子邮件地址的类。

所以我需要显示一个显示您已设置的所有产品类型的屏幕,并允许您选择所选产品的详细信息值,然后我需要查询并查找与此匹配的客户

1 个答案:

答案 0 :(得分:1)

我需要做的就是序列化表单并将其作为数据传递给我的ajax调用。如果在控制器端被调用,我有一个与模型类型相同的参数,我的视图强烈键入模型绑定器是足够聪明的,可以自动填充我的对象