首页 新闻 会员 周边 捐助

MVC5:子控制器继承父控制器,子控制器视图中使用@Url.Action返回空的问题

0
悬赏园豆:15 [已解决问题] 解决于 2017-11-14 10:57

我的项目中,使用Route特性进行路由组织。

其中父控制器CatalogControllerBase<TEntity>有Index/List/Add/Update/Delete/Exists/Upload/Download八个方法。

子控制器如下:

[RouteArea("master")]
[RoutePrefix("item")]
ItemController:CatalogControllerBase<ItemEntity>

[RouteArea("master")]
[RoutePrefix("category")]
CategoryController:CatalogControllerBase<CategoryEntity>

[RouteArea("master")]
[RoutePrefix("print")]
PrintController:CatalogControllerBase<PrintEntity>

 

我子控制器的视图中,使用@Url.Action方法,返回了空URL。

比如在Item控制器的List视图中,我尝试如下三种写法@Url.Action("Add"),@Url.Action("Add", "Item"),@Url.Action("Add", "Item", new { Area = "master" })均是返回空"".

直接硬编码"/master/item/add"是没有问题的,访问该URL正常显示。

 

请教大家,这是什么原因,应该如何解决才能正确获得URL?

PS:硬编写URL除外。

MVC
VAllen的主页 VAllen | 初学一级 | 园豆:94
提问于:2017-11-13 13:59
< >
分享
最佳答案
0

我在这里找到了解决方案:

https://stackoverflow.com/questions/23431043/mvc-attribute-routes-route-inheritance

https://stackoverflow.com/questions/19989023/net-webapi-attribute-routing-and-inheritance

该帖子里说继承IDirectRouteProvider接口,自己写实现。

我的做法是继承DefaultDirectRouteProvider类,重写GetActionRouteFactories方法。

实现代码如下:

public class CustomDirectRouteProvider : DefaultDirectRouteProvider
{
    protected override IReadOnlyList<IDirectRouteFactory> GetActionRouteFactories(ActionDescriptor actionDescriptor)
    {
        // inherit route attributes decorated on base class controller's actions
        var data= actionDescriptor.GetCustomAttributes(typeof(IDirectRouteFactory), true)
            .Cast<IDirectRouteFactory>()
            .ToList();

        var list = new ReadOnlyCollection<IDirectRouteFactory>(data);

        return list;
    }
}
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        ...
        routes.MapMvcAttributeRoutes(constraintsResolver, new CustomDirectRouteProvider());
        ...
    }
}

谢谢大家。

VAllen | 初学一级 |园豆:94 | 2017-11-14 10:56
其他回答(1)
0

你的项目目录贴出来看看

收获园豆:15
心怀宇宙 | 园豆:643 (小虾三级) | 2017-11-13 17:27

我的问题类似于这个https://stackoverflow.com/questions/23431043/mvc-attribute-routes-route-inheritance.

已经采用这个帖子的方案解决了,谢谢。

支持(0) 反对(0) VAllen | 园豆:94 (初学一级) | 2017-11-14 10:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册