2011-01-14 18 views
0

が、私はエラーをスローしない方法でこれに似た何かを行うことができます:MVCコントローラのアクションの過負荷

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)); 
    } 

} 

点は、私が通過/広告/リソースにアクセスする方法を持つようにしたいということですブラウザではなく、使用してマスターページ内のURLなどの詳細/リーダーボード:

<% Html.RenderAction("Details", "Ads", new {slot = "Leaderboard" }); %> 

<% Html.RenderAction("Details", "Ads", new {slot = AdSlots.Leaderboard }); %> 

私はちょうどそれがよりきれいだと思います210

私は上記のように行うと、私はこのエラーを取得するURL /広告/詳細/リーダーボードを呼び出す場合:私は、属性[ChildActionOnly]を与えているように私は私がそのエラーを取得するとは思わなかった

The current request for action 'Details' on controller type 'AdsController' is ambiguous between the following action methods.. etc

他のアクション。私はそれがシステムのために明らかだったと私はブラウザを介してアクセスする場合、私は1つのオプションを持っているだけではないように、明らかにそうだった。

答えて

1
たぶん

ない素敵な、しかし
<% Html.RenderAction("Details", "Ads", new {id = AdSlots.Leaderboard.ToString() }); %> は、常に最初のアクションにつながるはずです...そして問題は、MVCはとにかくあなたの列挙型のtoString()を呼び出しますので、あなただけの第二のコントローラを残すことができることをされて以来あなたの問題は消えるかもしれません... enumの解析はその高価です...

0

ChildActionOnlyAttributeは、操作が子の要求の一部として、Html.ActionHtml.RenderActionで表示されるように強制します。 MVCがメソッドを着信ルート呼び出しに一致させようとすると、この属性は考慮されません。

関連する問題