2012-08-16 95 views
3

我使用MVC2與VS2008,並在視圖〜/共享/的Site.Master下面的一段代碼:MVC2抱怨說,它不能找到一個控制器上的公共行動方法,即使它的存在

<ul id="navlist"> 
      <li class="first"><a href="<%= Url.Content("~")%>" id="current">Home</a></li> 
      <li><a href="<%= Url.Content("~/Store/")%>">Store</a></li> 
      <li> 
       **<% Html.RenderAction("CartSummary","ShoppingCart"); %></li>** 
      <li><a href="<%= Url.Content("~/StoreManager/") %>">Admin</a></li> 
     </ul> 

拋出以下異常:用於處理 'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'

錯誤執行子請求。

具有這種內部異常:

「A公共動作方法 'CartSummary' 未對控制器 'MvcMusicStore.Controllers.ShoppingCartController' 找到」。

......這沒有任何意義。 「CartSummary」方法定義如下:

// GET: /ShoppingCart/CartSummary 
[NHibernateActionFilter] 
[ChildActionOnly] 
[HttpGet] 
public ActionResult CartSummary() 
{ 
    var cart = ShoppingCart.GetCart(this.HttpContext, this.NSession); 

    ViewData["CartCount"] = cart.GetCount(); 

    return PartialView("CartSummary"); 
} 

那麼是什麼給了?我在這裏錯過了什麼嗎?

回答

5

如果從子操作中刪除[HttpGet]屬性,會發生什麼情況?

如果我是正確的,則會調用與「主要操作」相同的HTTP動詞來調用子動作。

+0

這奏效了。但主要行動也是一個GET,那麼給出了什麼? – 2012-08-19 19:48:54

+0

總是或有一個Post版本,或者與HttpPost屬性完全不同的操作ViewResults使用這個部分視圖? (例如,當你把東西放在購物車中。) – 2012-08-20 08:00:08

0

@Cosmo ...是控制器'ShoppingCartController'或ShoppingCart的名稱。如果它是'ShoppingCartController',那麼html.RenderAction將會作爲控制器名稱將不正確。

更改爲: Html.RenderAction(「CartSummary」,「ShoppingCartController」);

+0

是的,控制器被命名爲ShoppingCartController,根據你的建議,我將RenderAction的第二個參數值更改爲「ShoppingCartController」,這給了我以下例外:{「The未找到路徑'/'的控制器或未實現IController。「} – 2012-08-16 15:36:55

+0

控制器隱含在每個MVC控制器名稱的末尾,並且不需要明確附加。 – 2012-08-16 20:20:15

0

變化Html.RenderActionHtml.Action或刪除[ChildActionOnly]過濾

相關問題