C# 具有进一步操作的MVC控制器id

C# 具有进一步操作的MVC控制器id,c#,asp.net-mvc,C#,Asp.net Mvc,因此,目前正在尝试创建一个网站(MVC相对较新)。假设我有当前链接: www.website.com/Project/3 这很好用。然而,在这个项目中,我希望3几乎总是在那里,以更好的方式指定项目(因为人们可以有多个项目)。因此,如果他们进入项目中的某个页面,我希望它看起来像这样: www.website.com/Project/3/CreateOption 我一直在想办法,但想不出任何好办法。做过研究,但要么不知道写什么到谷歌,要么是不可能的 如果有人能帮忙,那就太棒了!如果您需要更多信息,请

因此,目前正在尝试创建一个网站(MVC相对较新)。假设我有当前链接:

www.website.com/Project/3

这很好用。然而,在这个项目中,我希望3几乎总是在那里,以更好的方式指定项目(因为人们可以有多个项目)。因此,如果他们进入项目中的某个页面,我希望它看起来像这样:

www.website.com/Project/3/CreateOption

我一直在想办法,但想不出任何好办法。做过研究,但要么不知道写什么到谷歌,要么是不可能的


如果有人能帮忙,那就太棒了!如果您需要更多信息,请告诉我。

不确定您的MVC版本


但这正是你想要的

这相对容易做到。。如果您的url结构非常明确。如果不需要标准的默认路由,则只需执行以下操作:

routes.MapRoute(
   name: "Project",
   url: "Project/{projectId}/{action}",
   defaults: new { controller = "Project", action = "Index" }
这将要求projectId出现

然后,在您的行动方法中,您将:

public ActionResult Index(int projectId)
{

}

public ActionResult CreateOption(int projectId)
{

}
这里的关键是projectId是强制性的,而不是可选的,并且您的路由路径是硬编码为Project的


您可以将默认操作设置为索引或任何您喜欢的操作,以便/Project/3生成默认操作,如上所示。或者,您也可以强制执行该操作。如果需要其他参数,也可以添加这些参数(如果它们需要成为url的一部分)。

有没有办法为项目id创建控制器范围的变量?必须把它传给别人似乎是多余和烦人的。还有www.website.com/Project/3/EditOption/5之类的东西呢。这仅仅是EditOption(intprojectId,intoptionId)@Insight——你忘记了网站是无状态的,多用户的。当然,有很多方法可以避免这种情况。。您可以在数据库中为用户配置文件存储“当前”项目id,并在每次调用时检索该id。。您可以设置保存当前项目id的cookie,等等。。是的,正如我在上一段中所说的:“如果你需要额外的参数,你也可以添加那些,如果它们需要是URL的一部分”,但是你或多或少都必须确保所有可选的参数都在URL的末尾出现,因为中间的可选参数很难处理。