【问题标题】:mvc.net routing: routevalues in maproutesmvc.net 路由:maproutes 中的路由值
【发布时间】:2010-09-21 07:13:22
【问题描述】:

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

public ActionResult editteam(int id){}

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

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


            );

URL 与路由正确匹配,但我不知道应该在哪里构造作为被调用的操作方法名称的操作参数。

【问题讨论】:

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


    【解决方案1】:

    试试:

    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();
    

    【讨论】:

      【解决方案2】:

      尝试以下方法,将其用作您的路线:

      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 与提供的路由匹配时将被调用。

      【讨论】:

      • 恐怕这是路由参数的默认值,而不是运行时分配的动词和名词的实际值。每次匹配此路由时,使用此路由将在路由值字典的 action 字段中产生 {verb}{noun} 值。
      • 是否有可能您可以使用映射的自定义控制器,就像最后使用 .MVC 一样,甚至可以使用硬字符串:/Custom/{verb}/{noun}/{id}那么正如我所说,您的家庭控制器中的操作结果?直接通过?如果这不是您要查找的信息,请尝试澄清问题,因为我正在努力了解您还想知道什么。
      • 我需要的是,如果我有像 /edit/team/1 这样的 url 路由值字典应该在操作键处包含 editteam。如果我有像 manage/team/1 路由值字典这样的 url,那么在 action 键中应该有 manageteam。 routes.Maproutes 只能定义默认值而不是参数的动态值(在我的例子中是动词和名词)。我认为 eglasius 给出的解决方案应该可行。
      猜你喜欢
      • 2016-09-30
      • 2014-10-28
      • 2011-03-10
      • 1970-01-01
      • 2020-07-18
      • 2020-07-10
      • 2013-08-15
      • 1970-01-01
      • 2017-03-28
      相关资源
      最近更新 更多