MVC6路由问题

时间:2016-05-12 14:19:43

标签: html5 routing asp.net-core-mvc

我是MVC编码的新手,现在已经在这个问题上工作了几天。我在设置多个路由方案时遇到问题,并让它们按预期工作。这就是我所拥有的。

框架

  1. 产品/ Info.cshtml
  2. 产品/ Edit.cshtml
  3. 模型

    1. ProductCategory.Id
    2. ProductCategory.CategoryName
    3. 我想要做的是能够有两种不同的路由方案

      1. 产品/编辑/编号
      2. 产品/信息/类别名称
      3. 所以这就是我如何构建文档中的标签

        1. 对于Products / Edit / Id

          < asp-controller =“Products”asp-action =“Edit”asp-route-id =“@ item.Id”> Edit< / A>

        2. 对于Products / Info / CategoryName

          < asp-controller =“Products”asp-action =“Info”asp-route-category =“@ item.CategoryName”> @ item.CategoryName< / A>

        3. 所以事实是,这实际上会起作用,但是我的Products / Info / CategoryName的超链接被呈现为查询字符串而不是更友好的用户版本,例如一个类别是“Fireplaces”,所以我的链接for Info成为

          Products/Info?category=Fireplaces
          

          而不是我想要的

          Products/Info/Fireplaces
          

          如何配置路由以使Controller / Action / Parameter调用同时适用?我已经尝试将特定路由添加到app.UseMvc(),并且它们再次在功能上工作,但Info链接仍然呈现为查询字符串。

1 个答案:

答案 0 :(得分:0)

好的,终于到了底部。使用app.UseMvc(),我可以使用Controller类中的新DataAnnotations定义路径,而不是尝试使用旧方法定义路由,从而创建了我想要的用户友好链接,而不是查询字符串链接。所以对于我的控制器类中的Info()方法,我改为看起来像

[HttpGet]
[ActionName("Info")]
[Route("Products/Info/{category}")]
public IActionResult Info(string category)
{
   .....
   return View(productCategory);
}