ASP.NET MVCで、すべてのコントローラーで部分ビューを使用できるようにするにはどうすればよいですか?サイト全体に共通のナビゲーションを作成したいのですが、Html.Actionをマスターページに配置すると、1つのコントローラーに関連付けられたビューでのみ機能します。
現在、次のように定義されたコントローラーアクションがあります。
// GET: GetCategoriesPartial
[ChildActionOnly]
public ActionResult GetCategoriesPartial()
{
var category = CategoriesDataContext.GetCategories();
return PartialView(category);
}
そして、私はこのような部分的なビューを作成しました:
<%@ Import Namespace="wopr.Models" %>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<ul>
<%
foreach (var cat in Model as IEnumerable<Category>) {
%>
<li><a href="/categories/Details/<%=cat.catID%>"><%=cat.catName%></a></li>
<%
}
%>
</ul>
私のマスターページは次のようになります。
<%@ Import Namespace="wopr.Models" %>
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
<link type="text/css" rel="Stylesheet" href="/Content/Site.css" />
</head>
<body>
<div class="wrap-all">
<div style="text-align:right;">
<a href="/">Home</a> |
<a href="/games/">Games</a> |
<a href="/games/Index2/1">Games <em>(paginated)</em></a> |
<a href="/categories/">Categories</a> |
<a href="/upload/">Upload</a>
</div>
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
<!--This errors on any non-CategoryController page.-->
<%= Html.Action("GetCategoriesPartial")%>
<!---->
</div>
</body>
</html>
このコードは、CategoriesControllerによって処理されるものを表示している限り機能します。別のコントローラーによって処理されるビューに移動すると、例外が発生します。
System.Web.HttpException:パブリックアクションメソッド'GetCategoriesPartial'がコントローラー'wopr.Controllers.GamesController'で見つかりませんでした。
この部分ビューをサイトのすべてのコントローラーで使用できるようにするにはどうすればよいですか?
助けてくれてありがとう。Quakkels