2010-04-02 25 views
5

Tôi vừa mới hoàn thành ASP.NET MVC (2) CMS đầu tiên của mình. Bước tiếp theo là xây dựng trang web sẽ hiển thị dữ liệu từ cơ sở dữ liệu của CMS. Đây là thiết kế website:asp.net mvc2 - bộ điều khiển dành cho trang cái và tổ chức mã số

http://img56.imageshack.us/img56/4676/portal.gif http://img56.imageshack.us/img56/4676/portal.gif


# 1 (Red hộp) - loại màn hình bài viết. ViewModel:

public class CategoriesDisplay 
    { 
     public CategoriesDisplay() { } 

     public int CategoryID { set; get; } 
     public string CategoryTitle { set; get; } 
    } 

# 2 (Brown hộp) - hiển thị bài viết x cuối cùng; bỏ qua những người từ hộp màu xanh lá cây # 3. Viewmodel:

public class ArticleDisplay 
    { 
     public ArticleDisplay() { } 

     public int CategoryID { set; get; } 
     public string CategoryTitle { set; get; } 

     public int ArticleID { set; get; } 

     public string ArticleTitle { set; get; } 
     public string URLArticleTitle { set; get; } 
     public DateTime ArticleDate; 

     public string ArticleContent { set; get; } 

    } 

# 3 (hộp màu xanh lá cây) - Hiển thị x cuối bài viết. Sử dụng cùng một ViewModel như hộp màu nâu # 2

# 4 (hộp màu xanh) - Hiển thị danh sách các sự kiện sắp tới. Sử dụng dataContext.Model.Event làm ViewModel

Hộp # 1, # 2 và # 4 sẽ lặp lại toàn bộ trang web và chúng là một phần của trang chính. Vì vậy, câu hỏi của tôi là: cách tốt nhất để chuyển dữ liệu này từ Mô hình sang Bộ điều khiển và cuối cùng là Xem các trang là gì?

  1. Tôi có nên làm một bộ điều khiển cho trang tổng thể và lớp ViewModel sẽ quấn tất cả các lớp học này cùng HOẶC
  2. Tôi có nên tạo một phần xem cho mỗi của các hộp và làm cho mỗi trong số họ thừa hưởng lớp thích hợp (nếu nó thậm chí còn có thể là nó hoạt động theo cách này?) HOẶC
  3. tôi có nên đặt mã lặp đi lặp lại này trong tất cả các bộ điều khiển và tất cả thêm chuyển dữ liệu thông qua ViewData, mà sẽ có lẽ là wor se way :) HOẶC
  4. Có lẽ cách tốt hơn và nhiều hơn nữa nhưng tôi không biết/nhìn thấy nó?


Cảm ơn trước, Ile



EDIT:
Nếu câu trả lời của bạn là # 1, sau đó xin vui lòng giải thích làm thế nào để làm cho một bộ điều khiển cho trang chủ!

EDIT 2:
Trong hướng dẫn này được mô tả làm thế nào để truyền dữ liệu cho trang chủ sử dụng lớp trừu tượng: http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx
Trong "Liệt kê 5 - Bộ xử lý \ MoviesController.cs", dữ liệu được lấy trực tiếp từ cơ sở dữ liệu sử dụng LINQ, không phải từ kho lưu trữ. Vì vậy, tôi tự hỏi nếu điều này chỉ là trong hướng dẫn này, hoặc có một số thủ thuật ở đây và kho không thể/không nên được sử dụng?

+0

Có thể tạo trang cái được đánh mạnh trong MVC không? –

+0

Tôi cũng muốn biết câu trả lời câu hỏi này ti –

+0

câu trả lời cho qua dữ liệu để Master Page là ở đây: http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx –

Trả lời

4

Để có được dữ liệu đối với Sư Phụ trang của tôi:

  • tôi không thích sử dụng một lớp trừu tượng để có được dữ liệu vào trang chủ. Tôi thích thành phần hơn thừa kế.
  • Tôi không thích sử dụng từ điển ViewData vì nó không được nhập mạnh.

Tôi sẽ tạo Chế độ xem, Chế độ xem và Hành động cho từng phần. Sau đó, hãy gọi Html.RenderAction(...) Ví dụ:

Tôi sẽ tạo CategoriesDisplay.aspx chỉ với html cho hộp đỏ. Tôi sẽ chuyển cho bạn mô hình CategoriesDisplay của bạn. Sau đó, trong bộ điều khiển của tôi:

public class CategoryController : Controller 
{ 
    public ActionResult DisplayCategories() 
    { 
     var model = new CategoriesDisplay(); 
     ... 
     return View(model); 
    } 
} 

Sau đó, trong Master Page của tôi:

<% Html.RenderAction<CategoryController>(c => c.DisplayCategoreis()); %> 

Điều này sẽ làm cho inline xem CategoriesDisplay trong trang Master. Mà lần lượt cho phép bạn có SOC (Seperation of Concerns), mã sạch và dễ quản lý.

+0

Tôi có lẽ nên thêm, phần mở rộng Html.RenderAction tôi sử dụng là một phần của Asp.Net MVC tương lai lắp ráp. http://aspnet.codeplex.com/releases/view/41742 – mxmissile

+0

Tôi thấy ... không biết Html.RenderAction này là gì nên tôi hơi hoài nghi. Điều này chắc chắn âm thanh như giải pháp thú vị hơn so với một với lớp trừu tượng. Tôi sẽ thử nó trong một hoặc hai ngày và xem nếu nó thực sự tất cả các công trình với tôi :) Cảm ơn maxmissile! –

+0

Có thể thực hiện một hành động điều khiển và chúng tôi trong một chế độ xem khác không? Để chính xác hơn, liệu có thể định nghĩa bên trong Bộ điều khiển Html.RenderAction() có sử dụng Hành động và Chế độ xem nào để sử dụng không? –

2

Tôi đã chiến đấu với điều này.Ban đầu tôi đã làm rất nhiều việc đổ thêm dữ liệu vào ViewData, mà cuối cùng phải được đưa trở lại (đã thực hiện một số phần mở rộng giúp giảm bớt điều này, nhưng vẫn không tuyệt vời).

tôi sẽ đi với sự lựa chọn của bạn # 1 và thực hiện một ViewModel rằng kết thúc tốt đẹp tất cả các lớp học bạn sẽ cần.

+0

Tôi chỉnh sửa câu hỏi của mình ... Tôi quên thêm rằng tôi không có ý tưởng làm thế nào để làm cho bộ điều khiển cho trang chủ (tôi là asp.net newbie) –

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