如何注册类似行为的最低路线?

时间:2011-07-02 12:59:00

标签: asp.net-mvc model-view-controller routing asp.net-mvc-routing

我有一些行动:

public partial class MyController : Controller
{    
     public ActionResult Action1()
     {              
     }
     public ActionResult Action2(int id)
     {              
     }

     public ActionResult Action3(string id)
     {              
     }

     public ActionResult Action4(string name)
     {              
     }
}

我是否需要为每个操作设置注册路由:

 routes.MapRoute("r1", "{controller}/{action}/{id}", new { id = UrlParameter.Optional });   
 routes.MapRoute("r2", "{controller}/{action}/{name}", new { name = UrlParameter.Optional }); 

或者有一些方法可以为所有操作注册一个模式路由,或者我需要某种“黑客”?

2 个答案:

答案 0 :(得分:1)

类似的网址应该使用类似的路线。因此,在这种情况下,您只有一个网址格式为/controller/action/someid。所以只需使用默认路由:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后更新您的操作:

public partial class MyController : Controller
{    
     public ActionResult Action1()
     {              
     }
     public ActionResult Action2(int id)
     {              
     }

     public ActionResult Action3(string id)
     {              
     }

     public ActionResult Action4(string name)
     {              
     }
}

就最后一个操作而言,name参数可以作为查询字符串传递。如果您确实坚持将其作为路径的一部分,则可以将其重命名为id。最好将任意字符串(如名称)作为查询字符串参数传递,而不是作为URL路径的一部分传递。

答案 1 :(得分:0)

您无需注册这些额外的网址参数...... 如果您创建一个包含3个输入控件的表单并为其指定名称,则可以使用与输入控件相同的名称进行操作。他们将被魔术填补。

如果使用强类型视图,您甚至可以传递模型输入:

public class customer
{
    public int Id { get;set;}
    public string Name {get;set}
    public string LastName {get;set;}
}

在您的控制器中:

public ActionResult UpdateCustomer(Customer customer)
{
    // Add update logic
}