Asp.net MVC 布局 - 区域的路由问题
Asp.net MVC Layout - Routing Issue With Areas
我遇到了 MVC 路由问题(或者至少我认为是 mvc 路由 :))...
这是我工作流程的详细信息
在我的项目中,我必须明智地创建单独的用户 login.this 是完全自定义的登录部分。
所以我所做的是通过调用 ajax 函数附加我的菜单栏 html ,
该布局页面的 $(document).ready(function ())。
代码:
$(document).ready(function () {
$("#divProcessing").show();
$.ajax({
url: '@Url.Action("UICustomize", "Home")',
data: {
},
type: 'POST',
cache: false,
success: function (data) {
if (data != '')
{
$('#sidemenulist').append(data);
$("#divProcessing").hide();
}
else {
location.href = "/Home/Login";
}
}
});
});
"UICustomize","Home"
现在 UI 动态更改用户 wise.so - 到这部分没有问题。
之后,我必须明智地在 asp.net mvc 中使用 Area 来处理特定模块。
然后我遇到了问题。
在这个区域,我不能使用我的布局 ajax 功能,因为我的路径正在改变。
'/ClientManagement/Home/UICustomize'
我只想将该路径重定向到 Home/UICustomize。
怎么做到的?
路线如下:
路由配置
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 = "" })
或
@{ Html.RenderAction("UICustomize", "Home", new { area = "" }); }
渲染侧边栏菜单的局部视图。
我遇到了 MVC 路由问题(或者至少我认为是 mvc 路由 :))...
这是我工作流程的详细信息
在我的项目中,我必须明智地创建单独的用户 login.this 是完全自定义的登录部分。 所以我所做的是通过调用 ajax 函数附加我的菜单栏 html , 该布局页面的 $(document).ready(function ())。
代码:
$(document).ready(function () {
$("#divProcessing").show();
$.ajax({
url: '@Url.Action("UICustomize", "Home")',
data: {
},
type: 'POST',
cache: false,
success: function (data) {
if (data != '')
{
$('#sidemenulist').append(data);
$("#divProcessing").hide();
}
else {
location.href = "/Home/Login";
}
}
});
});
"UICustomize","Home"
现在 UI 动态更改用户 wise.so - 到这部分没有问题。
之后,我必须明智地在 asp.net mvc 中使用 Area 来处理特定模块。 然后我遇到了问题。 在这个区域,我不能使用我的布局 ajax 功能,因为我的路径正在改变。
我只想将该路径重定向到 Home/UICustomize。 怎么做到的?
路线如下: 路由配置
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 = "" })
或
@{ Html.RenderAction("UICustomize", "Home", new { area = "" }); }
渲染侧边栏菜单的局部视图。