我一直在玩 ASP.NET MVC 并且有一个问题。或者也许它担心我做错了。只是在一个蹩脚的网站上工作以伸展我的翅膀。很抱歉,这个问题一点也不简洁。
好的,这是场景。当用户访问主页/索引时,页面应显示产品列表和文章列表。文件布局是这样的(DAL 是我的数据访问层):
控制器 家 指数 意见 家 索引继承自 ViewPage 产品 列表继承自 ViewUserControl<IEnumerable<DAL.Product>> Single 继承自 ViewUserControl<DAL.Product> 文章 List 继承自 ViewUserControl<IEnumerable<DAL.Article>> Single 继承自 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",...)
抱怨未找到“单一”视图。该错误表明:
找不到局部视图“单一”。搜索了以下位置: ~/Views/Home/Single.aspx ~/Views/Home/Single.ascx ~/Views/Shared/Single.aspx ~/Views/Shared/Single.ascx
因为我是从 Product 中的视图调用 RenderAction(),所以我希望运行时在 Views\Product 中查找“Single”视图。然而,查找似乎是相对于调用原始视图(/Controller/Home 调用 /Views/Product)的控制器而不是当前视图。
所以我可以通过更改 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);
此修复程序有效,但是.. 我不明白为什么我需要指定视图的完整路径。对我来说,相对于当前视图的路径而不是原始控制器的视图路径来解释相对名称是有意义的。我想不出任何有用的情况,其中解释相对于控制器视图而不是当前视图的名称是有用的(除了在它们相同的典型情况下)。
这个时候我应该打个问号吧?强调这一点实际上是一个问题。