1

我有一些動作:如何註冊類似操作的最小路由?

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

還是有一些方法來註冊或也許我需要一些所有動作一個模式路線有點「黑客」?

回答

1

類似的網址,應該使用類似的航線。所以在這種情況下,你只有一個url模式,即/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路徑的一部分。

0

您不必註冊這些額外的URL參數... 如果你犯了一個表格3個輸入控件,給他們一個名字,然後讓你用相同的名字輸入控制器的動作。他們將magicaly填寫

如果使用強類型的意見,你甚至可以通過模型ALS輸入:

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 
}