2012-04-16 25 views
5

Tôi có một lớp được tạo tự động từ nhập khẩu một dịch vụ web có chứa một cái gì đó như thế này (viết tắt):Làm cách nào để sử dụng các thuộc tính trên thuộc tính được xác định trong nửa còn lại của một phần lớp?

[System.Runtime.Serialization.DataMemberAttribute()] 
public System.DateTime StartDate 
{ 
    get 
    { 
     return this.StartDateField; 
    } 
    set { /* implementation prop changed */ } 
} 

Và tôi muốn thêm một định dạng thuộc tính MVC thành viên này. Vì vậy, trong một tập tin có chứa cùng partial class định nghĩa, tôi muốn làm một cái gì đó như sau (đó là bất hợp pháp):

[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
public DateTime StartDate; 

Một phương pháp một phần là không sử dụng ở đây vì phương pháp từng phần phải tin, có khoảng trống trở lại loại, phải là phương pháp, v.v.

Làm cách nào để trang trí thành viên này?

+0

Sản phẩm mã thứ hai Đoạn nghĩa vụ phải được xác định 'StartDateField' sử dụng bởi các' tài sản StartDate' trong đoạn đầu tiên của bạn? –

+0

Thay vì sử dụng các lớp một phần để trang trí mã được tạo của bạn, bạn nên sử dụng thuộc tính 'MetadataType' với một lớp khác phản ánh lớp được tạo ra. ([Câu hỏi liên quan] (http://stackoverflow.com/questions/2999936/using-dataannotations-with-entity-framework)) –

+0

@ M.Babcock: không, đoạn thứ hai nằm trong một lớp học cùng tên với tên đầu tiên. Việc thêm tiện ích vào các lớp được tạo tự động theo cách này thông thường, nhưng thường bạn chỉ thêm thuộc tính/phương thức, bạn không định nghĩa lại chúng (afaik, bạn không thể). – Abel

Trả lời

10

Bạn có thể sử dụng MetadataType thuộc tính như thế này:

[MetadataType(typeof(MyClass_Validation))]  
public partial class MyClass 
{} 

public class MyClass_Validation  
{  
    [DisplayFormat(...)] 
    public DateTime StartDate { get; set; } 
} 
+0

Bạn có ý nói rằng việc sử dụng MetadataType ở đây buộc trình biên dịch thêm các thuộc tính của các chữ ký tương tự vào các chữ ký tương ứng trong lớp một phần không? Âm thanh tuyệt vời nếu nó hoạt động. – Abel

+0

Có, sử dụng thuộc tính 'MetadataType' để xác định loại sẽ chứa thuộc tính cho lớp được tạo tự động chẳng hạn. Nó cũng là một thực hành tốt để xác định các thuộc tính xác nhận trong một lớp khác nhau – ionden

+0

@Abel - Vâng, điều này được thiết kế đặc biệt cho trường hợp này. Và trận đấu là trên Tên, không phải trên chữ ký. –

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