【问题标题】:How to link to the root of an area?如何链接到一个区域的根目录?
【发布时间】:2012-02-29 19:26:13
【问题描述】:

在 asp.net mvc 3 中,如果我有一个名为 MyArea 的区域,我将如何使用 Url.Action 或 Url.RouteUrl 来获取到 http://myapproot/MyArea/ 的链接?我想链接到该区域的根目录,这样我就可以在 javascript 中重复使用 URL,所以如果可能的话,我不想在 url 中有控制器或操作。

【问题讨论】:

    标签: c# asp.net-mvc razor asp.net-mvc-routing


    【解决方案1】:

    要为您的 MyArea 创建一个“根”,您可以在位于 MyArea 的 AreaRegistration 类中的 RegisterArea() 方法中创建一个路由。

    示例: Foo 是“根”控制器的名称..

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "MyArea_default",
            "MyArea/Foo/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
    

    然后从您的 Razor 页面中,您可以像这样调用特定路线...

    @Url.RouteUrl("MyArea_default")
    

    将被渲染为

    /MyArea/Foo
    

    【讨论】:

    • 好的,所以没有办法干净地写一个链接到/MyArea?
    • 我不清楚你所说的 cleanly write 是什么意思——在我看来,调用 @Url.RouteUrl("[route name]") 是干净的。也许您更喜欢向您的 Global.asax.cs 添加一个新路由,它将简单地将“MyArea”指定为 URL。然后你可以在你的 razor 页面上调用 @Url.RouteUrl("MyArea") 来渲染 /MyArea
    • 抱歉,正如您所提到的,我所说的“干净”是指基本上实现与专门为该区域创建路线相同的效果。所以这就是答案。这里的原因是我有一堆部分视图存储在一个名为“组件”的区域中,并且我使用取决于用户操作(按钮单击等)从 ajax 调用动态呈现它们。这就是为什么我想要一个指向“根”区域 URL 的直接链接,所以我可以引用它,然后根据需要附加控制器/操作。感谢您为我解决这个问题。
    【解决方案2】:

    你可以使用Html.ActionLink:

    <%= Html.ActionLink("Show Blog", "ShowBlog", "Blog", new { area = "blog" }, null) %>
    

    Blog 是您的区域。看看this

    【讨论】:

    • 对,我的理解是如何链接到特定区域中的操作。我的问题是我不想明确链接到博客控制器或 ShowBlog 操作。
    • 所以你必须在Global.asax中设置一个MapRoute,然后在你的Url.Action函数中调用它的名字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2021-10-09
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2014-11-27
    相关资源
    最近更新 更多