加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 在区域中使用Url.RouteUrl()和路由名称

发布时间:2020-12-15 22:39:50 所属栏目:asp.Net 来源:网络整理
导读:作为附注,我了解整个 ambiguous controller names问题,并使用命名空间来使我的路由工作,所以我不认为这是一个问题. 到目前为止,我有我的项目级别的控制器,然后是一个用户区域,并注册了以下内容: public class UserAreaRegistration : AreaRegistration{ pub
作为附注,我了解整个 ambiguous controller names问题,并使用命名空间来使我的路由工作,所以我不认为这是一个问题.

到目前为止,我有我的项目级别的控制器,然后是一个用户区域,并注册了以下内容:

public class UserAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "User";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "UserHome","User/{id}",new { action = "Index",controller = "Home",id = 0 },new { controller = @"Home",id = @"d+" }
        );

        context.MapRoute(
            "UserDefault","User/{controller}/{action}/{id}",id = UrlParameter.Optional }
        );
    }
}

“UserHome”路由在那里,所以我可以允许看起来更干净的IMO的路由/ User / 5 vs. / User / Home / Index / 5.

理想情况下,我想使用Url.RouteUrl(“UserHome”,新的{id = 5})来生成其他地方的路由,但是这总是回到空白处,或者给我一个异常,称它找不到路由名称,显然在那里

但是当我使用Url.RouteUrl(“UserHome”,新的{controller =“Home”,action =“Index”,id = 5}),它没有任何问题.

为什么在路由映射中已经有默认值时,必须指定动作和控制器?我失踪了什么

解决方法

不知道是否有热修复,但现在的行为有点不同.
使用您的确切代码并尝试:
Url.RouteUrl("UserHome",new { id = 5 })

我现在得到:

/User/5?httproute=True

这仍然看起来很尴尬,所以我尝试了路由,并添加了另一个默认参数:

context.MapRoute(
            "UserHome",area = "User",id = 0,httproute = true },id = @"d+" }
        );

现在我使用

Url.RouteUrl("UserHome",new { id = 5 })

我得到一个很好的url

/User/5

免责声明路由声明中httproute = true可能会有不必要的副作用.

另外,更详细的使用:

@Url.RouteUrl("UserHome",new { controller = "Home",action = "Index",id = 5 })

仍然工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读