2010-08-12 20 views
6

Ví dụ tôi có một mô hình X với các thuộc tính Title (string) và Valid (bool). Tôi cần hiển thị cùng một mô hình trên hai trang riêng biệt với các nhãn trường và các điều khiển nhập khác nhau. Ví dụ: "Tiêu đề" cho tiêu đề và "Hợp lệ" để hợp lệ trên một biểu mẫu trong khi "Đích" cho tiêu đề và "Trả lại" để hợp lệ trên tiêu đề khác.ASP.NET MVC 2 cách để đại diện cho cùng một mô hình theo hai cách khác nhau

Tôi đoán cách dễ nhất là có hai chế độ xem khác nhau cho cùng một kiểu máy. Nhưng nó thực sự là một cách MVC để đi?

Cảm ơn

+0

Tấn công nhận xét cuối cùng của tôi về câu trả lời của tôi vì dường như khó có thể thoát khỏi phương pháp tiếp cận mô hình duy nhất, chúng ta hãy xem liệu chúng tôi có thể đưa ra giải pháp hay không. Câu hỏi: Bạn có cách nào phân biệt hai Mô hình về dữ liệu trong đó không? –

+0

Về cơ bản có. Để giữ mẫu của chúng tôi tầm thường, hãy nói rằng mô hình X có thêm một thuộc tính DataType (int) với các giá trị có thể 1 hoặc 2. – Ramunas

Trả lời

3

Vâng, giả sử bạn có một số thư mục Chế độ xem được gọi là Danh sách và một thư được gọi là Chi tiết - và hiển thị Mô hình trong hai phải khác nhau.

Bạn có thể tạo thư mục DisplayTemplates trong mỗi thư mục và tạo một PartialControl với cùng tên làm Mô hình của bạn và cũng mạnh mẽ nhập Mô hình của bạn.

Trong quan điểm khác nhau của bạn sau đó bạn có thể làm <%= Html.DisplayFor(your model) %> hoặc bạn cũng có thể sử dụng thường xuyên <% Html.RenderParital("NameOfPartial", ModelX); %>

Sửa Để thử và tiếp cận vấn đề ban đầu, có lẽ điều này có thể giúp bạn một cách nào đó (tôi đăng này như một câu trả lời cho một câu hỏi khác nhau How to change [DisplayName“xxx”] in Controller?)

public class MyDisplayName : DisplayNameAttribute 
{ 
    public int DbId { get; set; } 

    public MyDisplayName(int DbId) 
    { 
     this.DbId = DbId; 
    } 


    public override string DisplayName 
    { 
     get 
     { 
      // Do some db-lookup to retrieve the name 
      return "Some string from DBLookup"; 
     } 
    } 
} 

    public class TestModel 
    { 
     [MyDisplayName(2)] 
     public string MyTextField { get; set; } 
    } 

có lẽ bạn có thể viết lại tùy chỉnh thuộc tính để làm một số loại của logic-based Tên lựa chọn, và cách sử dụng các PartialView tương tự cho cả hai mô hình variati tiện ích?

+0

Vâng, đó là cách tôi đã thực hiện điều này. Nhưng điều khiến tôi hỏi những câu hỏi này là tôi mất khả năng sử dụng chú thích dữ liệu và sự quyến rũ nó mang lại cho tôi. Tôi đã hy vọng rằng ai đó sẽ xây dựng trên một số loại lớp trung gian cho một trong những quan điểm của tôi. Có lẽ nó là phức tạp hơn nhưng một cách MVC để làm công cụ như thế này? – Ramunas

+0

Và một điều nữa về thư mục.Nó không giống như đại diện cho cùng một mô hình trong dạng xem danh sách và chi tiết, nó giống như mô tả cùng một mô hình trong các khung nhìn Controller1/Edit/1 và Controller2/Edit/2. Về mặt kỹ thuật, nó là cùng một mô hình đại diện cho hai thực thể nghiệp vụ khác nhau (như Sản phẩm và Lộ trình trong ví dụ tầm thường của tôi) – Ramunas

+0

Thành thật mà nói, tôi sẽ sử dụng cùng một mô hình cho hai đối tượng thực thể hoàn toàn khác nhau. Điều gì sẽ xảy ra nếu bạn quyết định làm cho Sản phẩm hơi khác so với Tuyến đường sau này? Bạn sẽ phải làm một trong hai 1. Thực hiện các thay đổi tương tự cho cả hai - hoặc - 2. Tạo một mô hình mới và đi qua mã của bạn thay đổi ở mọi nơi bạn sử dụng Định tuyến cho Sản phẩm hoặc ngược lại. Như bạn nói, bạn không muốn mất sự quyến rũ của chú thích, và tôi hoàn toàn đồng ý - vì vậy tôi không thực sự thấy lợi thế của việc sử dụng cùng một mô hình cho hai thực thể khác nhau. –

1

Có thực sự là cùng một kiểu máy không?

Nếu chúng là hai thực thể khác nhau có các thuộc tính tương tự thì tôi sẽ tạo hai mô hình chế độ xem riêng biệt. Bất kỳ tính phổ biến nào cũng có thể được đặt trong lớp hoặc giao diện cơ sở trừu tượng.

Nếu đó là cùng một kiểu máy nhưng chỉ một màn hình nhập khác thì chắc chắn, hãy sử dụng lại mô hình.

Tôi sẽ tưởng tượng trường hợp đầu tiên có lẽ là trường hợp có liên quan ở đây.

+0

Vâng, đó là mô hình tương tự từ chế độ xem kỹ thuật. Nhưng đồng thời có hai mô hình từ quan điểm kinh doanh. Và vâng tôi biết nó nghe có vẻ như crap nhưng đó là cách nó được. – Ramunas

2

Có, hai Chế độ xem khác nhau phù hợp, vì bạn đang cung cấp hai VIEWS khác nhau cho MODEL của mình.

Tuy nhiên, bạn có chắc chắn bạn không làm mất dữ liệu của mình thành một mô hình duy nhất, khi thực tế nó đại diện cho một thực thể khác trong mỗi trường hợp?

+0

Xem nhận xét của tôi về câu trả lời của Yngve B. Nilsen. Vâng, bạn nói đúng, tôi đang sử dụng một mô hình cho các thực thể khác nhau, nhưng đó là cách duy nhất để tham gia vào việc tái cấu trúc một giải pháp doanh nghiệp trong một năm hoặc lâu hơn. – Ramunas

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