2012-04-12 89 views
4

而不是隻有{controller}/{action}/{id}有可能有多個參數,如 {controller}/{action}/{id}/{another id}MVC 4:多控制器動作參數

我是新來的MVC(來自普通的網頁)。如果不可能,MVC是否提供了類似於網頁中可用的UrlData的幫助方法?

回答

4

你只需要映射新的路線在Global.asax的,就像這樣:

routes.MapRoute(
    "NewRoute", // Route name 
    "{controller}/{action}/{id}/{another_id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional, another_id = UrlParameter.Optional } // Parameter defaults 
); 

然後在您的控制器的動作,你可以拿起參數如下:

public ActionResult MyAction(string id, string another_id) 
{ 
    // ... 
} 
+1

你應該是第一個ID添加到您的動作方法的參數列表:公衆的ActionResult MyAction(串號,串another_id)以便讓IDS被使用示例操作。 – Tommy 2012-04-12 03:44:39

+0

@Tommy謝謝,已更新 – McGarnagle 2012-04-12 03:45:47

+1

我一直試圖在IIS Express和完整的IIS 7上進行此操作,但得到第二個參數的錯誤404.0。我嘗試閱讀http://www.asp.net/mvc/tutorials/older-versions/deployment/using-asp-net-mvc-with-different-versions-of-iis-cs,但沒有任何幫助。有什麼建議麼? – DavidHyogo 2013-02-12 02:47:37

3

是的,您可以在路線中定義多個參數。您需要首先在您的Global.asax文件中定義您的路線。您可以在URL段中或URL段的一部分中定義參數。要使用你的榜樣,你可以定義爲

{controller}/{action}/{id1}/{id2} 

的MVC架構的路線,然後將解析匹配的路由提取ID1和ID2段和它們在你的操作方法分配給相應的變量:

public class MyController : Controller 
{ 
    public ActionResult Index(string id1, string id2) 
    { 
    //.. 
    } 
} 

或者,您也可以接受來自查詢字符串或表單變量的輸入參數。例如:

MyController/Index/5?id2=10 

路由進行了更詳細的討論here