2013-10-30 15 views
5

Làm cách nào để BindAttribute Bao gồm hoặc Loại trừ các thuộc tính lồng nhau trong bộ điều khiển của tôi?BindAttribute, Loại trừ các thuộc tính lồng nhau cho các loại phức tạp

Tôi có một 'suối' mô hình:

public class Stream 
{ 
    public int ID { get; set; } 

    [Required] 
    [StringLength(50, ErrorMessage = "Stream name cannot be longer than 50 characters.")] 
    public string Name { get; set; } 

    [Required] 
    [DataType(DataType.Url)] 
    public string URL { get; set; } 

    [Required] 
    [Display(Name="Service")] 
    public int ServiceID { get; set; } 

    public virtual Service Service { get; set; } 
    public virtual ICollection<Event> Events { get; set; } 
    public virtual ICollection<Monitor> Monitors { get; set; } 
    public virtual ICollection<AlertRule> AlertRules { get; set; } 
} 

Để có cái nhìn 'tạo ra' cho mô hình này, tôi đã thực hiện một mô hình điểm để vượt qua thêm một số thông tin cho người xem:

public class StreamCreateVM 
{ 
    public Stream Stream { get; set; } 
    public SelectList ServicesList { get; set; } 
    public int SelectedService { get; set; } 
} 

Dưới đây là bài viết tạo ra hành động của tôi:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include="Stream, Stream.Name, Stream.ServiceID, SelectedService")] StreamCreateVM viewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Streams.Add(viewModel.Stream); 
      db.SaveChanges(); 
      return RedirectToAction("Index", "Service", new { id = viewModel.Stream.ServiceID }); 
     } 

     return View(viewModel); 
    } 

Bây giờ, điều này tất cả các công trình, ngoài các [Bind(Include="Stream, Stream.Name, Stream.ServiceID, SelectedService")] bit. Tôi dường như không bao gồm hoặc Loại trừ các thuộc tính trong một đối tượng lồng nhau.

Trả lời

0

Theo this answer, bạn có thể làm một cái gì đó như:

[Bind(Include="Name, ServiceID")] 
public class Stream 
{ 
... 
} 

và sau đó

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include="Stream, SelectedService")] StreamCreateVM viewModel) 
{ 
... 
} 
+0

Cảm ơn, nhưng tôi có những hành động khác trong bộ điều khiển cần liên kết với các thuộc tính khác nhau, vì vậy đề nghị này sẽ loại trừ điều đó. –

Các vấn đề liên quan