Tonmoy
Tonmoy

Reputation: 2038

How can I share same action with two names on ASP.NET MVC Controller

The situation is, I need to use the same method for two action names in a ASP.NET controller. To elaborate, say http://mydomain/Members/Index and http://mydomain/Members/Browse should act as same or, have the same method as below for only Members controller:

public ActionResult Browse()
{
    var members = _dbContext.Members.ToList();

    return View("Browse", members);
}

Currently, I am using two ActionResults named "Browse" and "Index" with the same code but may be there is a better way to do this. I looked into Attributes but ActionName Attribute doesn't help me with what I need. Also, google searches give me suggestions with same methods but different HTTP request types and method overloading examples. Any help is very much appreciated.

Upvotes: 1

Views: 1062

Answers (1)

Tonmoy
Tonmoy

Reputation: 2038

I've used Index action in the controller and added a exclusive route for "Members/Browse" to point to the "Index" action of "Members" Controller. because in the other way around, "Members/" gives 404 error.

Here is the controller action now (example):

public ActionResult Index()
{
    var members = _dbContext.Members.ToList();

    return View("Index", members);
}

Routes defined in RouteConfig now:

routes.MapRoute(
    name: "MemberBrowseRoute",
    url: "Members/Browse",
    defaults: new { Controller = "Members", Action = "Index" });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Upvotes: 1

Related Questions