我正在尝试创建一个将覆盖TopicsDetails.cshtml页面的插件。我添加了这样一条路线:
routes.MapRoute("Nop.Plugin.Other.CustomTopic.ViewCustomTopic", "{SeName}",
new { controller = "CustomTopic", action = "TopicDetails", SeName = UrlParameter.Optional },
new[] { "Nop.Plugin.Other.CustomTopic.Controllers" });
这是将所有{SeName}传递给我的CustomTopicController。即使是产品SeName。
如果我添加此而不是旧版本:
routes.MapRoute("Nop.Plugin.Other.CustomTopic.ViewCustomTopic",
new { controller = "CustomTopic", action = "TopicDetails" },
new[] { "Nop.Plugin.Other.CustomTopic.Controllers" });
我收到错误,因为TopicDetails(int itemId)Action接收到一个未提供的整数,因为我们知道GenericPathRoutes.cs提供该整数。
如何覆盖GenericPathRoutes.cs的规则来执行此操作,以便只有SeName主题可以访问我的Controller,或者是否有其他方式可以执行此类工作,或者甚至可以执行此操作?
答案 0 :(得分:1)
最近我写了一篇文章,展示了如何覆盖本地化路由,并以TopicDetails视图为例。那篇文章是here。 简而言之,您的路线提供者应如下所示;
public class RouteProvider : IRouteProvider
{
private const string NAMESPACES = "Nop.Plugin.Misc.Custom.Controllers";
private const string CONTROLLER = "MiscCustom";
public void RegisterRoutes(RouteCollection routes)
{
//Public Override
routes.MapGenericPathRoute("Plugin.Misc.Custom.GenericUrl",
"{generic_se_name}",
new { controller = "Common", action = "GenericUrl" },
new[] { NAMESPACES });
}
public int Priority
{
get { return Int32.Max; }
}
}
答案 1 :(得分:0)
我不确定我是否理解你的问题 你可以通过添加来试试吗? id = UrlParameter.Optional 这里任何id参数都是可选的,它不会抛出该错误