我的控制器看起来像这样:
[HttpGet]
[Route("{brand}/{category}/{subcategory?}/{productid:int:min(9000)}", Name="ProductDetails")]
public ActionResult Details(int productid)
{ //...}
我也尝试在子类别的末尾没有问号,因为它可以为null。
[Route("{brand}/{category}/{subcategory}/{productid:int:min(9000)}", Name="ProductDetails")]
我的剃刀观点中有这个:
<a href="@Url.RouteUrl("ProductDetails",
new { brand = item.Brand,
category = item.CatCodeNaam,
subcategory = item.SubCategoryName,
productid = item.ID })">test</a>
<a href="@Url.Action("Details", "Products",
new { brand = item.Brand,
category = item.CatCodeNaam,
subcategory = item.SubCategoryName,
productid = item.ID })">test</a>
当SubCategoryName
不为空时,这两种方法都很有用。但是当它是空的时该怎么办?我无法添加其他路由,因为它将具有相同数量(和类型)的输入参数,只有一个int。
当我有这个控制器时:
[HttpGet]
[Route("{brand}/{category}/{subcategory}/{productid:int:min(9000)}", Name = "ProductDetails")]
[Route("{brand}/{category}/{productid:int:min(9000)}", Name = "ProductDetails2")]
public ActionResult Details(int productid)
当子类别为空时,第一个<a
工作;当子类别不为空时,第二个<a
具有routename。有没有一种方法只有一个版本的<a
,也许只有一个路由作为Details方法的属性?
答案 0 :(得分:0)
使用我的剃须刀中的这条紧凑型线“固定”它:
<a href="@(!string.IsNullOrWhiteSpace(item.SubCategoryName) ? Url.RouteUrl("ProductDetails", new { brand = item.Brand, category = item.CatCodeNaam, subcategory = item.SubCategoryName, productid = item.ID }) : Url.Action("Details", "Products", new { brand = item.Brand, category = item.CatCodeNaam, subcategory = item.SubCategoryName, productid = item.ID }))">
感谢https://stackoverflow.com/a/4092187/169714
仍然期待更好的解决方案,所以我不接受我自己的答案,并希望有更好的解决方案。