2011-01-14 15 views
0

Kann ich etwas tun, ähnlich wie dies in einer Weise, die keinen Fehler werfen:MVC Controller-Aktion Überlastung

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

} 

Der Punkt ist, dass ich einen Weg für den Zugriff auf die Ressource über/Anzeigen haben wollen/Details/Rangliste als uRL im Browser, sondern auch bei der Verwendung von Masterseite:

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

ich denke nur, dass sauberer als ist:

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

Wenn ich wie oben tun und rufen Sie die URL/ads/details/Rangliste ich diesen Fehler:

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

ich nicht glaube, ich diesen Fehler bekommen würde, wie ich das Attribut [ChildActionOnly], um die gegeben haben andere Aktion. Ich würde dann denken, dass es für das System offensichtlich war, dass wenn ich über den Browser darauf zugreife, ich nur eine Option hätte, nicht so offensichtlich.

Antwort

1

Vielleicht nicht die schönste, aber
<% Html.RenderAction("Details", "Ads", new {id = AdSlots.Leaderboard.ToString() }); %> immer in der ersten Aktion zur Folge haben sollte ... Und da das Problem ist, dass MVC eine ToString() auf Enum ruft ANYWAY, so dass Sie nur den zweiten Controller auslassen könnten Aktion insgesamt, und dann könnte Ihr Problem weggehen ... Parsing eine Enum ist nicht , dass teuer ...

0

Die ChildActionOnlyAttribute erzwingt nur, dass die Aktion als Teil einer untergeordneten Anforderung über Html.Action und Html.RenderAction aus Ihrer Sicht aufgerufen wird. Dieses Attribut wird nicht berücksichtigt, wenn MVC versucht, eine Methode dem eingehenden Routenaufruf zuzuordnen.