Routing: The current request for action [...] is ambiguous between the following action methods
You can only have a maximum of 2 action methods with the same name on a controller, and in order to do that, 1 must be [HttpPost]
, and the other must be [HttpGet]
.
Since both of your methods are GET, you should either rename one of the action methods or move it to a different controller.
Though your 2 Browse methods are valid C# overloads, the MVC action method selector can't figure out which method to invoke. It will try to match a route to the method (or vice versa), and this algoritm is not strongly-typed.
You can accomplish what you want using custom routes pointing to different action methods:
... in Global.asax
routes.MapRoute( // this route must be declared first, before the one below it
"StartBrowse",
"Gallery/Browse/Start/Here",
new
{
controller = "Gallery",
action = "StartBrowse",
});
routes.MapRoute(
"ActualBrowse",
"Gallery/Browse/{searchterm}",
new
{
controller = "Gallery",
action = "Browse",
searchterm = UrlParameter.Optional
});
... and in the controller...
public ActionResult Browse(string id)
{
var summaries = /* search using id as search term */
return View(summaries);
}
public ActionResult StartBrowse()
{
var summaries = /* default list when nothing entered */
return View(summaries);
}
You might also be able to keep the action methods named the same in the controller, by applying an [ActionName]
attribute to one to distinguish it. Using the same Global.asax as above, your controller would then look like this:
public ActionResult Browse(string id)
{
var summaries = /* search using id as search term */
return View(summaries);
}
[ActionName("StartBrowse")]
public ActionResult Browse()
{
var summaries = /* default list when nothing entered */
return View(summaries);
}
I don't know when the question was asked this solution was available but you can use:
Request.QueryString["key"]
So this should work fine for your problem:
[HttpGet]
public ActionResult Browse()
{
if( Request.QueryString["id"] != null )
var summaries = /* search using id as search term */
else /*assuming you don't have any more option*/
var summaries = /* default list when nothing entered */
return View(summaries);
}
Add following code in RouteConfig.cs before Default route
routes.MapMvcAttributeRoutes();
And add route attributes in the controller like:
[Route("Cars/deteals/{id:int}")]
public ContentResult deteals(int id)
{
return Content("<b>Cars ID Is " + id + "</b>");
}
[Route("Cars/deteals/{name}")]
public ContentResult deteals(string name)
{
return Content("<b>Car name Is " + name + "</b>");
}