使用可选参数的MVC自定义(属性)路由不起作用

时间:2015-05-27 13:06:16

标签: asp.net-mvc attributerouting

我的控制器看起来像这样:

[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方法的属性?

1 个答案:

答案 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

仍然期待更好的解决方案,所以我不接受我自己的答案,并希望有更好的解决方案。