我是MVC的新手,我的路线定义如下:
routes.MapRoute(
name: "NewRoute",
url: "P/{colorname}-{id}/{statename}-{materialtype}-{HasPrice}",
defaults: new
{
controller = "Products",
action = "P",
id = UrlParameter.Optional,
statename = UrlParameter.Optional,
colorname = UrlParameter.Optional,
materialtype = UrlParameter.Optional,
HasPrice = UrlParameter.Optional
}
);
当用户在我的网站上搜索时,我希望显示以下网址:
P /قیمت-نوعمواد-ناماستان/شماره-رنگ
但得到404错误并显示此网址:/ P / - / -
请帮帮我... 感谢...
答案 0 :(得分:0)
首先,在这种情况下,拥有可选的路线值没有任何意义。可选参数仅如果它们是最右边的参数,后面只有另一个可选参数或/
,则可以工作。你的网址中有破折号,这使得这不可能。因此,请删除路线中的可选声明:
routes.MapRoute(
name: "NewRoute",
url: "P/{colorname}-{id}/{statename}-{materialtype}-{HasPrice}",
defaults: new
{
controller = "Products",
action = "P"
}
);
您还必须确保route can be matched(即没有在其之前注册的路由将导致其无法访问)。在简单的英语中,这意味着您必须在默认路线之前定义上述路线。
请注意,因为没有任何参数是可选的,所以如果有任何缺失参数,将始终跳过路径 - 这是理想的行为,因为您的配置中可能存在您想要匹配的其他路径
现在,要生成所需的URL,您需要在生成URL时提供缺少的路由数据。例如,您可以使用上述路线生成指向问题中URL的超链接:
@Html.ActionLink("My Link", "P", "Products",
new { colorname = "رنگ", id = "شماره", statename = "نام استان",
materialtype = "نوع مواد", HasPrice = "قیمت" }, null)
当然,这假设您已经创建了一个名为ProductsController
的控制器,其中包含一个名为P
的操作。