我的申请效果很好。
在我的视图中,我有一个指向MyProducts控制器的链接(删除所有逻辑以保持后期整洁)
这看起来像
[HttpGet]
public ActionResult Index(string product, string gender)
{
return RedirectToAction("Index", "Home", new { product = product, gender = gender });
}
在我的HomeController中,我有
public ActionResult Index(string product, string gender)
{
ViewBag.Message = product;
return View();
}
并在我的视图中
@using (Html.BeginForm("Index", "MyProduct", FormMethod.Get))
{
<input name="product" /><br />
<input name="gender" /><br />
<input type="submit" />
}
这很简单。它很棒。
如果我使用以下路线表
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{product}",
defaults: new { controller = "Home", action = "Index", product = UrlParameter.Optional}
);
一切正常,当我搜索产品时,网址呈现为
www.mysite.com/Home/Index/Shoes
然而,我需要能够按性别过滤,例如男士鞋或女士鞋。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{product}/{gender}/",
defaults: new { controller = "Home", action = "Index", product = UrlParameter.Optional, gender = UrlParameter.Optional}
);
当我用两个参数执行搜索时,这会杀死我的好路由,而不是向我显示所需的网址,如
www.mysite.com/Home/Index/Shoes/Ladies
实际上是显示
www.mysite.com/Home/Index/?product=Shoes&gender=Ladies
我看不出我做错了什么
答案 0 :(得分:1)
创建多个路由,连续多个可选参数将导致url生成器使用参数
routes.MapRoute(
name: "GenderOptional",
url: "{controller}/{action}/{product}/{gender}",
defaults: new { controller = "Home", action = "Index", gender = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{product}",
defaults: new { controller = "Home", action = "Index", product = UrlParameter.Optional }
);