【问题标题】:Remove Area Name from Url ASP.NET MVC 4从 URL ASP.NET MVC 4 中删除区域名称
【发布时间】:2018-09-07 10:12:49
【问题描述】:

您好,我在我的 asp.net mvc 4 应用程序中使用区域,我有多个区域,我正在从一个区域导航到另一个区域,如何从 Url 中删除区域名称,如下所示:

.../AreaName/ControllerName/ActionName 到 .../ControllerName/ActionName

例如:

"ActionLink("Text","ActionNAme","ControllerName",new{area = "area name"},null)"

有时我会在某个过程之后重定向到其他区域内的某些视图,如下所示:

"ReturnRedirectToAction("Text","ActionName","ControllerName",new{area ="areaName"}, null)"

像这样一切正常,但我不希望 AreaName 出现在 Url 中。

这是一个 AreaRegistration 类:

public class ChileAreaAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "ChileArea";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "ChileArea_default",
                "ChileArea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

【问题讨论】:

  • 这是否涉及例如Html.ActionLink(...)?请显示一些代码。
  • @PeterB,我更新了我的问题。
  • 感谢您的回复,但它不是重复的,我的目标是摆脱 url 中的区域名称,我的导航还可以,我从一个区域导航到另一个区域没有问题,我的目标是删除 URL 的区域名称

标签: asp.net-mvc asp.net-mvc-areas


【解决方案1】:

如果您想完全摆脱一个或多个控制器的区域部分 - 这意味着它/它们不应再属于一个区域,那么您必须移动 *Controller.cs + 对应的 ViewsModels,以及可能对应的 DisplayTemplates/EditorTemplates,放入 Controllers / Views / Models 文件夹在项目的根目录。

如果您使用的是 VisualStudio,那么您可以为此使用拖放操作。

明智的做法是为每个移动的.cs-文件调整命名空间,以保持清晰和一致,并相应地调整所有using

【讨论】:

  • 我不能这样做,因为我必须使用区域。不过谢谢你的回答。
  • 那么你想要的就是不可能的,AFAIK。该区域决定了控制器和视图等的位置。您可以将“区域”控制器映射到站点的根目录,但是控制器再也找不到它的视图 - 除非您移动这些文件(我想移动这些文件没有意义,但不是所有的否则)。
【解决方案2】:

将此装饰器放在控制器定义中

[RouteArea("AreaName", AreaUrl = "")]

【讨论】:

  • 我试过了,但没有成功,当尝试访问不同区域的另一个控制器中的操作时,它给了我“404 Not found”。 '[但是当我删除该属性时它会起作用,并且]但在这种情况下,我一直在 UR 中获取区域名称,这原本是我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多