现在,问题。我有一个电子商务网站,并且我有一个名为 Store 的控制器,其中包含一个操作索引。当有人键入 www.mysite.com/sony 时,我想使用参数路由到控制器存储和操作索引brand=Sony
。如果有人键入 www.mysite.com/sony-tv,我想路由到控制器存储和操作索引,但使用参数brand=sony
和department=tv
.
我通过为存储在数据库中的每种情况创建路由并在应用程序启动时动态构建路由来获得这一点。它在少数情况下工作正常。首先,我需要索引路线。我需要在sony之前映射路线sony-tv,否则/sony-tv同样映射到/sony。
当我进入站点主页 (www.mysite.com) 并单击 Url.Action("Index","Store", new {brand=Sony}) 时,它会将我引导至 www.mysite.com/sony。好的!。现在,在 SONY 品牌中,我将点击 Url.Action("Index","Store", new {brand=sony, department=tv}),我可以看到所有来自 Sony 的电视。
直到这里一切都运行良好。在数据库中,我有 1 条通往 /sony 的路线,我说我有一个名为品牌的参数,其值为 Sony,以及一个受约束的命名品牌,其值为 Sony。我有另一条路线对索尼电视说同样的方式。模式sony-tv 有一个名为brand 的参数,其值为sony 和一个名为deparment 的参数,其值为tv,参数约束相同。
在我看来,这意味着 www.mysite.com/Sony 的路线是 Store/Index/brand=sony,而 www.mysite.com/sony-tv 是 Store/Index/brand=sony&department=tv。有了约束,我知道如果部门不是电视或者参数部门不存在,它将发送到 www.mysite.com/sony
当我在 www.mysite.com/sony-tv 时,如果我将鼠标移到其他品牌上,则指向 Url.Action("Index","Store", new {brand=Apple}) 的链接是 www .mysite.com/Apple-Tv 我有一条通往 Apple-TV 的路线,与索尼相同。URL 存在,但我没有传递 TV 参数。我只传递了这个链接(品牌链接)的品牌。我想将用户移至品牌的根目录,而他已移至品牌+部门。
我不知道,看起来部门变量又通过了,我不知道如何取消它。
我完全错了吗?我在做什么是有效的?我能做到吗?我的错误在哪里?
在 cshtml 文件中:
@Html.ActionLink(febrand.Name.ToUpper(), "Index", new { controller = "Store", brand= febrand.FriendlyName, department = string.Empty })
在最终的 html 文件中(显示来自 google chrome 的源代码):
<a href="/sony?department=tv">SONY</a>