【发布时间】:2013-04-05 01:44:29
【问题描述】:
现在,问题。我有一个电子商务网站,我有一个名为 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>
【问题讨论】:
标签: c# asp.net asp.net-mvc routing url-routing