I have simple question about MVC routing. How i can construct Html.ActionLink thhat generates following link http://mysite.com/phones/samsung
Now it’s generates as http://mysite.com/phones/brand?brand=samsung
Also i want to avoid mentioning action name in URL
There is my code:
Route:
routes.MapRoute(null, "Phones/{brand}",
new { controller = "Phones", action = "Index", brand = UrlParameter.Optional });
Controller:
MySyteDBEntities ms = new MySyteDBEntities();
public ActionResult Index()
{
ViewBag.Brand = ms.Phones.Select(x => x.Brand).Distinct();
return View();
}
public ActionResult Brand(string brand)
{
ViewBag.Standard = ms.Phones.Where(x => x.Brand == brand).Select(x => x.Standard).Distinct();
return View();
}
Index View code:
@foreach (string item in ViewBag.Brand)
{
<div>@Html.ActionLink(item, "Brand", new { brand = item })</div>
}
In your MapRoute you have no space for an action, so asp.net will always use the default action “Index”.
By default your routing would look like this:
You’re missing the action part.
Routevalues in you actionlink which don’t match parameters in your route, will be querystring parameters. So you need to change “category” to ” brand” in your route.
Try this:
and
Be sure to call the controller explicit in your ActionLink, if the current view is mapped through another route, otherwise it doesn’t recognize the
brandparameter.