mvc.net routing:maproutes中的routevalues

时间:2010-09-21 07:13:23

标签: asp.net-mvc-2 routes url-routing

我需要像/controller/verb/noun/id这样的网址,我的动作方法是动词+名词。例如,我希望/home/edit/team/3点击操作方法

public ActionResult editteam(int id){}

我的global.asax文件中有以下路由。

routes.MapRoute(
              "test",
              "{controller}.mvc/{verb}/{noun}/{id}",
              new { docid = "", action = "{verb}"+"{noun}", id = "" }


            );

网址与路由正确匹配,但我不知道应该在哪里构建动作参数,该参数是被调用的动作方法的名称。

2 个答案:

答案 0 :(得分:3)

尝试:

public class VerbNounRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        IRouteHandler handler = new MvcRouteHandler();
        var vals = requestContext.RouteData.Values;
        vals["action"] = (string)vals["verb"] + vals["noun"];
        return handler.GetHttpHandler(requestContext);
    }
}

我不知道如何自动为所有路由挂钩,但在您的情况下,您可以为该条目执行此操作,如:

routes.MapRoute(
   "test",
   "{controller}.mvc/{verb}/{noun}/{id}",
   new { docid = "", id = "" }
   ).RouteHandler = new VerbNounRouteHandler();

答案 1 :(得分:-1)

尝试以下操作,将其用作路线:

routes.MapRoute(
              "HomeVerbNounRoute",
              "{controller}/{verb}/{noun}/{id}",
              new { controller = "Home", action = "{verb}"+"{noun}", id = UrlParameter.Optional }
            );

然后你只需要使用你的actionresult方法:

public ActionResult editteam(int id){}

进入Controllers / HomeController.cs,当URL与提供的路径匹配时,将调用它。