2010-11-01 38 views
6

Tôi đang cố gắng để có được vào MVC và hiện đang đọc cuốn sách chuyên nghiệp ASP.NET MVC wrox.Ai đó có thể giải thích ASP.NET MVC cho tôi?

Tôi nhận được nó cho đến nay. Thay vì mỗi URL đi đến một trang nó đi đến một bộ điều khiển. Hành động của bộ điều khiển sau đó lấy dữ liệu và quyết định xem sử dụng cái gì.

Tôi cũng hiểu rằng nếu tôi có url như/product.aspx? Id = 100 thì trình điều khiển sẽ nhận được chi tiết sản phẩm và hợp nhất chúng với chế độ xem "hiển thị sản phẩm".

Bây giờ đây là chút Tôi không nhận được ...

Nếu trang sản phẩm của tôi có thứ khác trên nó, giống như một hộp đăng nhập, một phần "top 10 sản phẩm", danh sách các loại vv mà có thể hoặc không được sử dụng trên các trang khác nữa thì tôi sẽ bao gồm chúng như thế nào và giữ mã riêng biệt?

Trong mô hình aspx cổ điển, nó sẽ đơn giản. Nếu 10 sản phẩm hàng đầu của tôi xuất hiện trên mỗi trang thì tôi sẽ đặt nó trong trang chính, nhưng nhiều khả năng tôi sẽ biến nó thành một điều khiển người dùng nếu nó sẽ được sử dụng trên một số trang chứ không phải các trang khác.

Từ những gì tôi hiểu về MVC cho đến nay, bộ điều khiển sản phẩm của tôi sẽ có được 10 sản phẩm hàng đầu và bất kỳ bộ điều khiển nào khác đang sản xuất một trang có 10 sản phẩm hàng đầu trên đó.

Bối rối. Hãy giúp tôi.

+1

"nếu tôi có url như/product.aspx? Id = 100" - bạn thì không. :) – bzlm

+1

Tạm dừng việc đọc và bắt đầu viết mã, sau đó bạn hiểu ... :) – Aristos

+0

bzlm, điểm tốt. sản phẩm/100 – jonhobbs

Trả lời

4

Từ những gì tôi hiểu về MVC cho đến nay, điều khiển sản phẩm của tôi sẽ phải có được sản phẩm hàng đầu 10 và như vậy sẽ bất kỳ điều khiển khác đó là tạo ra một trang với 10 sản phẩm hàng đầu trên đó.

Không nhất thiết. Bạn có thể sử dụng trang Master với MVC, cũng như Partials để phân chia nội dung xem lại có thể sử dụng lại.

Đây là bài viết hay về cách sử dụng Partials. http://jeffreypalermo.com/blog/asp-net-mvc-and-the-templated-partial-view-death-to-ascx/

Ngoài ra, trong 10 sản phẩm trên ví dụ của bạn, bạn có thể có mà trả lại bởi một hành động trẻ em:

[ChildActionOnly] 
public ActionResult GetTopTenProducts() 
{ 
    var products = db.GetTopProducts(10); 
    return View(products); 
} 

Sau đó, bạn sẽ có một cái nhìn cục bộ (ascx) gọi là "GetTopProducts.ascx" mà sẽ được trả lại khi bạn gọi hành động GetTopTenProducts(). Sau đó, trong trang Master của bạn, hoặc bất cứ nơi nào bạn muốn rằng Top 10 danh sách để hiển thị, bạn sẽ gọi nó như thế này:

<% Html.RenderAction("GetTopTenProducts") %> 
+0

Ví dụ tuyệt vời. Cảm ơn. – jonhobbs

+0

Tôi đã có cùng một câu hỏi khi tôi bắt đầu học MVC :) – dotariel

+0

+1 - không có giao hàng vô nghĩa :) –

2

Bạn thân thiết.

Bạn chỉ quên rằng bộ điều khiển của bạn là một lớp có thể kế thừa từ một lớp cơ sở.

Bạn có thể tạo lớp điều khiển cơ sở xử lý truy xuất mười sản phẩm hàng đầu và sau đó có bất kỳ trình điều khiển nào cần chức năng đó kế thừa từ lớp cơ sở.

Sau đó, bạn tạo Trang cái sử dụng Chế độ xem từng phần để hiển thị mười sản phẩm hàng đầu được chuyển đến Chế độ xem (từ bộ điều khiển cơ sở).

... và thì đấy! Không lặp lại mã.

1

Xin đừng quên rằng trong ASP.NET MVC bạn vẫn có thể sử dụng MasterPage. Với cụ thể cho ASP.NET MVC 2, bạn có thể hiển thị 10 sản phẩm đó bằng cách sử dụng RenderAction có thể hiển thị Hành động từ bất kỳ Bộ điều khiển nào bạn chọn.

Ngoài ra, bạn cũng nên biết về PartialView.

+0

Cảm ơn, có vẻ như Renderaction và PartialView là những gì tôi đang tìm kiếm. Tôi sẽ phải đọc nhiều hơn. – jonhobbs

1

Bạn có thể sử dụng trang chính và trong chế độ xem một phần MVC đồng nghĩa với điều khiển người dùng. Sự khác biệt là trang chính không có bộ điều khiển tương ứng. Bạn giải quyết bằng một trong hai cách.

  1. Khi bạn sử dụng một cái nhìn cục bộ, bạn có thể vượt qua một mô hình trong.

    <%= Html.RenderPartial("PartialView",Model) %> 
    
  2. Bạn chỉ có thể làm việc trong giao diện phần, sử dụng dấu ngoặc đang <% %>.
Các vấn đề liên quan