我能否以不会引发错误的方式做类似的事情:
public class AdsController : Controller
{
AdsRepository repo = new AdsRepository();
public ActionResult Details(string id)
{
AdSlots adslot = new AdSlots();
Enum.TryParse(id, true, out adslot);
return Content(repo.GetInvocationCode(adslot, Global.SiteInfo.ID));
}
[ChildActionOnly]
public ActionResult Details(AdSlots slot)
{
return Content(repo.GetInvocationCode(slot, Global.SiteInfo.ID));
}
}
关键是我希望有一种方法可以通过/ ads / details / leaderboard作为浏览器中的网址访问资源,也可以使用以下方式在母版页中访问:
<% Html.RenderAction("Details", "Ads", new {slot = AdSlots.Leaderboard }); %>
我认为这比以前更清洁:
<% Html.RenderAction("Details", "Ads", new {slot = "Leaderboard" }); %>
如果我按上述方式操作并调用url / ads / details / leaderboard,我会收到此错误:
当前关于控制器类型'AdsController'的操作'详细信息'请求在以下操作方法之间是不明确的..等等
我不认为我会得到该错误,因为我已将属性[ChildActionOnly]赋予其他操作。我认为系统显而易见的是,如果我通过浏览器访问它,我只会有一个选项,显然不是这样。
答案 0 :(得分:2)
也许不是最好的,但是
<% Html.RenderAction("Details", "Ads", new {id = AdSlots.Leaderboard.ToString() }); %>
应该总是导致第一个动作......并且因为问题是MVC在你的枚举上调用ToString(),所以你可以完全忽略第二个控制器动作,然后你的问题可能会消失......解析枚举不是 昂贵......
答案 1 :(得分:0)
ChildActionOnlyAttribute
仅强制您通过视图中的Html.Action
和Html.RenderAction
将该操作作为子请求的一部分进行调用。当MVC尝试将方法与传入路由调用匹配时,不考虑此属性。