我一直在玩ASP.NET MVC,並有一個問題。或者,也許是我擔心我做錯了。只是在一個蹩腳的網站上工作,稍微拉伸我的翅膀。我很抱歉,這個問題並不簡明。ASP.Net MVC和RenderPartial w /相對路徑
好的,這是場景。當用戶訪問家庭/索引時,頁面應顯示產品列表和文章列表。文件佈局是這樣(DAL是我數據訪問層):但是
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
這種方法失敗。這種方法對我來說很有意義,但也許有更多有關這些MVC平臺的經驗的人會認識到更好的方法。
上面在View.Product.List中產生一個錯誤。對Html.RenderPartial("Single",...)
的電話抱怨說沒有找到「單一」視圖。該錯誤指示:
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
因爲我打電話的RenderAction()從產品的圖,我預期運行時尋找視圖中的「單」視圖\產品。但似乎查找是相對於調用原始視圖(/ Controller/Home invoked/Views/Product)而不是當前視圖的控制器。
所以我能夠改變瀏覽\產品來解決這個問題,使得:
View.Product.List will call
foreach(Product product in View.Model)
Html.RenderPartial("~/Views/Product/Single.ascx", product);
,而不是
View.Product.List will call
foreach(Product product in View.Model)
Html.RenderPartial("Single", product);
此修復工作,但..我不明白爲什麼我需要指定視圖的完整路徑。對我來說,將相對名稱解釋爲相對於當前視圖的路徑而不是原始控制器的視圖路徑是有意義的。我想不出任何有用的情況下,解釋名稱相對於控制器的視圖,而不是當前視圖是有用的(除了在典型的情況下,他們是相同的)。
在這段時間我應該有一個問號?強調這實際上是一個問題。
跨越這只是偶然尋找相關的東西(我知道它的6個月以上)。但是你提到使用RenderAction(),但是你所有的例子都使用RenderPartial(),這是一個錯字嗎?我會假設RenderAction(而不是RenderPartial)應該在這種情況下工作? – 2009-08-05 21:33:07