Jeff Martin
Jeff Martin

Reputation: 11022

how do i call an overloaded action in .net mvc?

I have an overloaded action in my Controller:

    public ActionResult AssignList(int id)
    {
        ...
    }

    [AcceptVerbs((HttpVerbs.Get))]
    public ActionResult AssignList(int id, bool altList)
    {
        ...
    }

I'd like to use the same partial view for both lists but it will potentially have a differently filtered list of Images.

I am trying to call it from another view using RenderAction:

<% Html.RenderAction("AssignList", "Image", new { id = Model.PotholeId, altList = true }); %>

However I am getting the following error:
The current request for action 'AssignList' on controller type 'ImageController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult AssignList(Int32) on type UsiWeb.Controllers.ImageController System.Web.Mvc.ActionResult AssignList(Int32, Boolean) on type UsiWeb.Controllers.ImageController

How can I call the specific overload?

Upvotes: 3

Views: 3010

Answers (2)

Sunny
Sunny

Reputation: 6346

Two options:

  • combine into a single method like:

    public ActionResult AssignList(int id, bool? altList){}

  • Give a name to the overloaded method like:

    public ActionResult AssignList(int id){}

    [ActionName("SomeActionName")] public ActionResult AssignList(int id, bool altList){}

I will refer you to this SO link: Can you overload controller methods in ASP.NET MVC?

Upvotes: 4

dahlbyk
dahlbyk

Reputation: 77600

The easiest solution would be to combine the actions, making altList nullable:

public ActionResult AssignList(int id, bool? altList)
{
    ...
}

Upvotes: 2

Related Questions