Tôi đã chơi xung quanh với ASP.NET MVC và đã có một câu hỏi. Hoặc có thể đó là một mối lo ngại rằng tôi đang làm điều này sai. Chỉ cần làm việc trên một trang web lame để kéo dài đôi cánh của tôi một chút. Tôi xin lỗi câu hỏi này không phải là tất cả súc tích.ASP.Net MVC và RenderPartial w/đường dẫn tương đối
Ok, đây là kịch bản. Khi người dùng truy cập trang chủ/chỉ mục, trang sẽ hiển thị danh sách các sản phẩm và danh sách các bài viết. Cách bố trí tập tin là như vậy (DAL là lớp truy cập dữ liệu của tôi): Tuy nhiên
Controllers Home Index Views Home Index inherits from ViewPage Product List inherits from ViewUserControl<IEnumerable<DAL.Product>> Single inherits from ViewUserControl<DAL.Product> Article List inherits from ViewUserControl<IEnumerable<DAL.Article>> Single inherits from ViewUserControl<DAL.Article>
Controllers.HomeController.Index produces a View whose ViewData contains two entries, a IEnumerable<DAL.Product> and a IEnumerable<DAL.Article>.
View.Home.Index will use those view entries to call:
Html.RenderPartial("~/Views/Product/List.ascx", ViewData["ProductList"])
and Html.RenderPartial("~/Views/Article/List.ascx", ViewData["ArticleList"])
View.Product.List will call
foreach(Product product in View.Model)
Html.RenderPartial("Single", product);
View.Article.List does something similar to View.Product.List
Cách tiếp cận này thất bại. Cách tiếp cận này có ý nghĩa với tôi, nhưng có lẽ ai đó có nhiều kinh nghiệm hơn với các nền tảng MVC này sẽ nhận ra một cách tốt hơn.
Ở trên tạo lỗi trong View.Product.List. Cuộc gọi đến Html.RenderPartial("Single",...)
khiếu nại rằng chế độ xem "Đơn" không được tìm thấy. Lỗi cho biết:
The partial view 'Single' could not be found. The following locations were searched: ~/Views/Home/Single.aspx ~/Views/Home/Single.ascx ~/Views/Shared/Single.aspx ~/Views/Shared/Single.ascx
Vì tôi đã gọi hàm RenderAction() từ chế độ xem trong Sản phẩm, tôi dự kiến thời gian chạy để tìm chế độ xem "Đơn" trong Chế độ xem \ Sản phẩm. Có vẻ như tuy nhiên việc tra cứu là tương đối với bộ điều khiển gọi ra khung nhìn gốc (/ Controller/Home được gọi/Views/Product) chứ không phải là khung nhìn hiện tại.
Vì vậy, tôi có thể sửa lỗi này bằng cách thay đổi Views \ sản phẩm, chẳng hạn rằng:
View.Product.List will call
foreach(Product product in View.Model)
Html.RenderPartial("~/Views/Product/Single.ascx", product);
thay vì
View.Product.List will call
foreach(Product product in View.Model)
Html.RenderPartial("Single", product);
sửa chữa công trình này nhưng .. Tôi không hiểu tại sao tôi cần phải chỉ định đường dẫn đầy đủ của chế độ xem. Nó sẽ có ý nghĩa với tôi cho tên tương đối được giải thích tương đối so với đường dẫn của khung nhìn hiện tại chứ không phải đường dẫn xem của trình điều khiển gốc. Tôi không thể nghĩ ra bất kỳ trường hợp hữu ích nào khi diễn giải tên liên quan đến giao diện của bộ điều khiển thay vì chế độ xem hiện tại là hữu ích (ngoại trừ trường hợp điển hình là chúng giống nhau).
Khoảng thời gian này, tôi nên có dấu chấm hỏi? Để nhấn mạnh điều này thực sự là một câu hỏi.
Chỉ cần stumbled trên này tìm kiếm cái gì liên quan (Tôi nhận ra nó trên 6 tháng tuổi). Nhưng bạn đề cập đến sử dụng RenderAction(), tuy nhiên tất cả các ví dụ của bạn sử dụng RenderPartial(), đây có phải là lỗi đánh máy không? Tôi sẽ giả định rằng RenderAction (như trái ngược với RenderPartial) nên làm việc trong tình huống này? –