ASP.Net MVC的路由问题 - 问号出现在我的链接 [英] ASP.Net MVC Routing Issue - Question Mark appears on my links

查看:307
本文介绍了ASP.Net MVC的路由问题 - 问号出现在我的链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个公共网站,接受一个页面名,这则默认为控制器和动作与页面名称作为唯一标识符来呈现正确的观点。例如。 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆