2012-08-16 91 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]过滤

相关问题