Ajax Asp.net MVC布局-带区域的布线问题

Ajax Asp.net MVC布局-带区域的布线问题,ajax,asp.net-mvc,asp.net-mvc-4,routes,Ajax,Asp.net Mvc,Asp.net Mvc 4,Routes,我对MVC路由有一个问题(或者至少我认为是MVC路由:) 下面是我工作流程的详细信息 在我的项目中,我必须创建单独的用户智能登录。这是完全自定义登录部分。 我所做的就是通过调用ajax函数将菜单栏添加到html中, $(document).ready(函数())的布局页 代码: “自定义”、“主页” 现在,用户界面在用户方面发生了动态变化。因此,到目前为止,这一部分还没有问题 之后,我必须使用asp.NETMVC中的Area来实现特定的模块。 那我就有麻烦了。 在这个区域,我不能使用布局aja

我对MVC路由有一个问题(或者至少我认为是MVC路由:)

下面是我工作流程的详细信息

在我的项目中,我必须创建单独的用户智能登录。这是完全自定义登录部分。 我所做的就是通过调用ajax函数将菜单栏添加到html中, $(document).ready(函数())的布局页

代码:

“自定义”、“主页”

现在,用户界面在用户方面发生了动态变化。因此,到目前为止,这一部分还没有问题

之后,我必须使用asp.NETMVC中的Area来实现特定的模块。 那我就有麻烦了。 在这个区域,我不能使用布局ajax功能,因为我的路径被更改了

“/ClientManagement/Home/UICustomize”

我只想将该路径重定向到Home/UICustomize。 如何做到这一点

以下是路线: RouteConfig

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Login", id = UrlParameter.Optional }
      );
区域

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

        );

    }
Url.Action()
将默认使用当前区域,这就是它生成带有您区域名称的Url的原因。要删除它,请使用

$.ajax({
    url: '@Url.Action("UICustomize", "Home", new { area = "" })',
    ....
在您的情况下,它将生成
/Home/UICustomize
,而不是
/ClientManagement/Home/UICustomize

但是,不应该使用ajax渲染侧栏。相反,使用
[ChildActionOnly]
属性装饰
UICustomize()
方法(因此用户无法导航到该方法),并在布局中使用

@Html.Action("UICustomize", "Home", new { area = "" })


要呈现侧边栏菜单的部分视图。

如果不需要area方法,请将其设置为
null
-
@Url.Action(“UICustomize”,“Home”,new{area=”“})
@StephenMuecke如何在此处设置?这是我的ajax调用url--url:'@url.Action(“UICustomize”,“Home”)'在区域中,此区域自动更改为url:'/ClientManagement/Home/UICustomize',阅读我的评论-添加
新的{area=”“}
,然后生成
/Home/UICustomize
。但是为什么要使用ajax来实现这一点,而不是使用
@Html.Action()
来调用生成菜单/边栏的子操作?事实上,您拥有
location.href=“/Home/Login”提示了代码中的其他设计问题。@StephenMuecke,噢,它正在工作@Action(“UICustomize”,“Home”,new{area=”“})谢谢你,伙计:)如果可能的话,你能解释一下吗?我不明白你对我说的话。“但是为什么要使用ajax来实现这一点,而不是使用@Html.Action()来调用生成菜单/侧栏的子操作?”
@Html.Action("UICustomize", "Home", new { area = "" })
@{ Html.RenderAction("UICustomize", "Home", new { area = "" }); }