ASP.Net MVC的路由问题 - 问号出现在我的链接 [英] ASP.Net MVC Routing Issue - Question Mark appears on my links
问题描述
我有一个公共网站,接受一个页面名,这则默认为控制器和动作与页面名称作为唯一标识符来呈现正确的观点。例如。 http://www.mydomain.com/homepage
我也有,所有CRUD的东西通过管理员的preFIX发生访问管理区。例如。 http://www.mydomain.com/admin/controller/action
直到最近,我改变了一些一切都被罚款,现在当我到 http://www.mydomain.com /主页我有联系,如:
< UL ID =菜单>
<立GT;<%= Html.ActionLink(家,详细信息,网页,新的页面名{=主页},NULL)%GT;< /李>
<立GT;<%= Html.ActionLink(关于,详细信息,网页,新的页面名{=主页},NULL)%GT;< /李>
< / UL>
不再显示为 http://www.mydomain.com/homepage 而是的 http://www.mydomain.com/Admin/WebPage/Details?pageName=homepage
有人能帮助?
下面是我的Global.asax:
公共静态无效的RegisterRoutes(RouteCollection路线)
{
routes.IgnoreRoute({}资源个.axd / {*} PATHINFO); routes.MapRoute(AdminRoot
管理,
新{控制器=管理,行动=索引}
); routes.MapRoute(
登录,//路线名称
登录,// URL带参数
新{控制器=账户,行动=登录},
新{行动=登录}
); routes.MapRoute(账户,
帐户/ {}行动,
新{控制器=账户,行动=}
); //routes.MapRoute(
//默认,//路线名称
//{控制器} / {行动} / {ID},// URL带参数
//新的{控制器=家,行动=索引,ID =} //参数默认
//);
routes.MapRoute(
ErrorRoute,//路线名称
错误/ Error404,// URL带参数
新{控制器=错误,行动=Error404}
);
routes.MapRoute(管理,
管理/ {控制器} / {行动} / {ID}
新{控制器=管理,行动=索引,ID =}
/ *,新{行动=创建|编辑|删除} * /
); routes.MapRoute(EventNewsData
管理/ {控制器} / {行动} / {每年} / {}一个月,
新{控制器=管理,行动=指数,去年= 0,一个月= 0}
/ *,新{行动=创建|编辑|删除} * /
); routes.MapRoute(
默认,//路线名称
{页面名称} / {} moreInfoID,// URL带参数
新{控制器=网页,行动=详细信息,页面名称=主页,moreInfoID = 0},
新{行动=详细信息}
);
routes.MapRoute(错误,{* URL},新{控制器=错误,行动=Error404}); }
UPDATE:这有固定的,但真的不知道为什么
公共静态无效的RegisterRoutes(RouteCollection路线)
{
routes.IgnoreRoute({}资源个.axd / {*} PATHINFO); routes.MapRoute(AdminRoot
管理,
新{控制器=管理,行动=索引},
新{行动=索引}
); routes.MapRoute(
登录,//路线名称
登录,// URL带参数
新{控制器=账户,行动=登录},
新{行动=登录}
); routes.MapRoute(账户,
帐户/ {}行动,
新{控制器=账户,行动=}
); //routes.MapRoute(
//默认,//路线名称
//{控制器} / {行动} / {ID},// URL带参数
//新的{控制器=家,行动=索引,ID =} //参数默认
//); routes.MapRoute(管理,
管理/ {控制器} / {行动} / {ID}
新{控制器=管理,行动=索引,ID =}
,新{行动=创建|编辑|删除|首页| DeleteFromIndex}
); routes.MapRoute(EventNewsData
管理/ {控制器} / {行动} / {每年} / {}一个月,
新{控制器=管理,行动=指数,去年= 0,一个月= 0}
,新{行动=GetCalendarData}
); routes.MapRoute(
默认,//路线名称
{页面名称} / {} moreInfoID,// URL带参数
新{控制器=网页,行动=详细信息,页面名称=主页,moreInfoID = 0},
新{行动=详细信息}
); routes.MapRoute(
ErrorRoute,//路线名称
错误/ Error404,// URL带参数
新{控制器=错误,行动=Error404}
); routes.MapRoute(错误,{* URL},新{控制器=错误,行动=Error404}); }
也许问题出在行动=详细信息
约束(有没有{行动}在{页面名称} / {} moreInfoID):
routes.MapRoute(
默认,//路线名称
{页面名称} / {} moreInfoID,// URL带参数
新{控制器=网页,行动=详细信息,页面名称=主页,moreInfoID = 0},
新{行动=详细信息}
);
更新:
现在您的code使用这条路线:
routes.MapRoute(管理,
管理/ {控制器} / {行动} / {ID}
新{控制器=管理,行动=索引,ID =}
/ *,新{行动=创建|编辑|删除} * /
);
但是你可以使用Html.RouteLink代替:
< UL ID =菜单>
<立GT;<%= Html.RouteLink(家,默认,新的页面名{=主页})%GT; < /李>
<立GT;<%= Html.RouteLink(关于,默认,新的页面名{=主页})%GT; < /李>
< / UL>
更新:
ASP.NET路由查找与详细信息行动和网页控制器(页面名称是可选的)和匹配管理路线的路线。
更新时间:
或之前管理路由添加这条路线:
routes.MapRoute(TheRoute
{页面名称} / {} moreInfoID
新{控制器=网页,行动=详细信息,moreInfoID = 0},
新页面名{=主页}
);
I have a public website which accepts a pagename, this then defaults to a controller and action with the pagename as the unique identifier to render the correct view. eg. http://www.mydomain.com/homepage
I also have a admin area where all CRUD stuff takes place access via a prefix of admin. eg. http://www.mydomain.com/admin/controller/action
Everything has been fine until I changed something recently and now when I got to http://www.mydomain.com/homepage the links I have such as:
<ul id="menu">
<li><%= Html.ActionLink("Home", "Details", "WebPage", new { pageName = "homepage" }, null)%></li>
<li><%= Html.ActionLink("About", "Details", "WebPage", new { pageName = "homepage" }, null)%></li>
</ul>
no longer appear as http://www.mydomain.com/homepage but instead http://www.mydomain.com/Admin/WebPage/Details?pageName=homepage
Can someone help?
Here is my Global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("AdminRoot",
"Admin",
new { controller = "Admin", action = "Index" }
);
routes.MapRoute(
"LogOn", // Route name
"LogOn", // URL with parameters
new { controller = "Account", action = "LogOn" },
new { action = "LogOn" }
);
routes.MapRoute("Account",
"Account/{action}",
new { controller = "Account", action = "" }
);
//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}", // URL with parameters
// new { controller = "Home", action = "Index", id = "" } // Parameter defaults
//);
routes.MapRoute(
"ErrorRoute", // Route name
"Error/Error404", // URL with parameters
new { controller = "Error", action = "Error404" }
);
routes.MapRoute("Admin",
"Admin/{controller}/{action}/{id}",
new { controller = "Admin", action = "Index", id = "" }
/*,new { action = "Create|Edit|Delete" }*/
);
routes.MapRoute("EventNewsData",
"Admin/{controller}/{action}/{year}/{month}",
new { controller = "Admin", action = "Index", year = 0, month = 0 }
/*,new { action = "Create|Edit|Delete" }*/
);
routes.MapRoute(
"Default", // Route name
"{pageName}/{moreInfoID}", // URL with parameters
new { controller = "WebPage", action = "Details", pageName = "homepage", moreInfoID = 0 },
new { action = "Details" }
);
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "Error404" });
}
UPDATE: This has fixed it but not really sure why
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("AdminRoot",
"Admin",
new { controller = "Admin", action = "Index" },
new { action = "Index" }
);
routes.MapRoute(
"LogOn", // Route name
"LogOn", // URL with parameters
new { controller = "Account", action = "LogOn" },
new { action = "LogOn" }
);
routes.MapRoute("Account",
"Account/{action}",
new { controller = "Account", action = "" }
);
//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}", // URL with parameters
// new { controller = "Home", action = "Index", id = "" } // Parameter defaults
//);
routes.MapRoute("Admin",
"Admin/{controller}/{action}/{id}",
new { controller = "Admin", action = "Index", id = "" }
, new { action = "Create|Edit|Delete|Index|DeleteFromIndex" }
);
routes.MapRoute("EventNewsData",
"Admin/{controller}/{action}/{year}/{month}",
new { controller = "Admin", action = "Index", year = 0, month = 0 }
, new { action = "GetCalendarData" }
);
routes.MapRoute(
"Default", // Route name
"{pageName}/{moreInfoID}", // URL with parameters
new { controller = "WebPage", action = "Details", pageName = "homepage", moreInfoID = 0 },
new { action = "Details" }
);
routes.MapRoute(
"ErrorRoute", // Route name
"Error/Error404", // URL with parameters
new { controller = "Error", action = "Error404" }
);
routes.MapRoute("Error", "{*url}", new { controller = "Error", action = "Error404" });
}
Maybe the problem is in action = "Details"
constraint (There is no "{action}" in "{pageName}/{moreInfoID}"):
routes.MapRoute(
"Default", // Route name
"{pageName}/{moreInfoID}", // URL with parameters
new { controller = "WebPage", action = "Details", pageName = "homepage", moreInfoID = 0 },
new { action = "Details" }
);
UPDATED:
Now your code is using this route:
routes.MapRoute("Admin",
"Admin/{controller}/{action}/{id}",
new { controller = "Admin", action = "Index", id = "" }
/*,new { action = "Create|Edit|Delete" }*/
);
But you can use Html.RouteLink instead:
<ul id="menu">
<li><%= Html.RouteLink("Home", "Default", new { pageName = "homepage" })%> </li>
<li><%= Html.RouteLink("About", "Default", new { pageName = "homepage" })%> </li>
</ul>
UPDATED:
ASP.NET Routing looks for route with "Details" action and "WebPage" controller ("pageName" is optional) and match "Admin" route.
UPDATED:
Or add this route before "Admin" route:
routes.MapRoute("TheRoute",
"{pageName}/{moreInfoID}",
new { controller = "WebPage", action = "Details", moreInfoID = 0 },
new { pageName = "homepage" }
);
这篇关于ASP.Net MVC的路由问题 - 问号出现在我的链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!