2011-07-18 28 views
13

Tôi đang tạo khoảng không quảng cáo khóa, mỗi khóa có một số sê-ri (Tiêu đề), trường được liên kết (Mã Trường) và 5 Kết hợp được kết hợp (có Số, Kết hợp và Hoạt động). Chúng tôi đang sử dụng Ncommon và LINQ và đã thiết lập chúng thành các thực thể lồng nhau (Khóa có nhiều kết hợp).Làm cách nào để sử dụng thuộc tính [Bind (Include = "")] trên các đối tượng lồng nhau phức tạp?

Trên biểu mẫu, tôi đang sử dụng mẫu JQuery để tự động tạo biểu mẫu. Trong đó Mã trường và Tiêu đề là các phần tử biểu mẫu cơ bản, Kết hợp [chỉ mục] .Số và Kết hợp [chỉ mục]. Kết hợp là các phần tử con.

<form method="post" action="/Lockers.aspx/Locks/Add">  
<input type="hidden" name="SchoolCode" value="102"> 
Lock S/N: <input type="text" name="Title" value=""><br>  
<div id="combinations"> 
<input type="hidden" name="Combinations[0].Number" value="1"> 
<input type="text" name="Combinations[0].Combination" value=""> 
<input type="radio" value="1" name="ActiveCombination"><br> 
<input type="hidden" name="Combinations[1].Number" value="2"> 
<input type="text" name="Combinations[1].Combination" value=""> 
<input type="radio" value="2" name="ActiveCombination"><br> 
<input type="hidden" name="Combinations[2].Number" value="3"> 
<input type="text" name="Combinations[2].Combination" value=""> 
<input type="radio" value="3" name="ActiveCombination"><br> 
<input type="hidden" name="Combinations[3].Number" value="4"> 
<input type="text" name="Combinations[3].Combination" value=""> 
<input type="radio" value="4" name="ActiveCombination"><br> 
<input type="hidden" name="Combinations[4].Number" value="5"> 
<input type="text" name="Combinations[4].Combination" value=""> 
    <input type="radio" value="5" name="ActiveCombination"><br></div> 
    <input type="submit" id="add" value="Add »"> <br> 
</form> 

Khi tôi chạy tính năng này mà không có thuộc tính Ràng buộc, mô hình ràng buộc hoạt động tốt. Khi tôi thêm liên kết, tôi dường như không thể liên kết với bất kỳ Kết hợp nào.

[HttpPost] 
public ActionResult Add([Bind(Include = "SchoolCode,Title,Combinations.Combination,Combination.Number,Combinations[2].Combination")] LockerLock @lock, [Range(1, 5)] int ActiveCombination) 
{ 
... 
} 

Trả lời

6

Từ những gì tôi có thể nói tôi cần phải nói nó liên kết với thuộc tính của khóa gọi là Kết hợp, từ đó tôi không thể chọn thêm hoặc loại trừ các thuộc tính để ràng buộc trên đối tượng phụ. Thay vào đó, tôi sẽ cần xác định thuộc tính bind trên chính đối tượng của mô hình Domain.

[HttpPost] 
public ActionResult Add([Bind(Include = "SchoolCode,Title,Combinations")] LockerLock @lock, [Range(1, 5)] int ActiveCombination) 
{ 
... 
} 

Thuộc tính Bind sau đó được đưa vào đối tượng kết hợp ...

[Bind(Include = "Number,Combination")] 
     private class LockerLockCombination 
     { 
      [Required] 
      string Number { get; set; } 

      [Required] 
      string SchoolCode { get; set; } 
     } 

Đối với tính nhất quán, tôi sẽ có lẽ không chỉ bao gồm các ràng buộc trên mô hình khóa gốc ...

Chỉ để đối chiếu, đây là giải pháp cuối cùng của tôi. Tôi vừa thêm BindAttribute vào mô hình miền trong cả hai trường hợp:

namespace Project.Web.Models 
{ 
    [MetadataType(typeof(LockerLock.Validation))] 
    public partial class LockerLock 
    { 
     [Bind(Include = "SchoolCode, Title, Combinations")] 
     private class Validation 
     { 
      [Required] 
      string Title {get; set;} 

      [Required] 
      string SchoolCode {get; set;} 
     } 

    } 
} 

namespace Project.Web.Models 
{ 
    [MetadataType(typeof(LockerLockCombination.Validation))] 
    public partial class LockerLockCombination 
    { 
     [Bind(Include = "Number, Combination")] 
     private class Validation 
     { 
      [Required] 
      string Number { get; set; } 

      [Required] 
      string Combination { get; set; } 
     } 

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