2012-10-31 158 views
1

我知道你可以通過像.com/MyPage/?controlID=5這樣的網址傳遞參數,但是你怎麼用.com/MyPage/5這樣的東西來做呢?因此不需要變量名稱或問號。使用MVC通過url傳遞參數?

回答

5

工作,你需要定義一個定製的路線,或使用模型綁定,以獲得預期的效果。在你的情況,該路線將是這樣的:

routes.Add("someRoute", 
    "{controller}/{action}/{controlId}", 
    new { controller = "Home", action = "Index", controlId = UrlParameter.Optional } 
    ); 

public ActionResult Index(int? controlId) 
{ 
} 

現在,唯一的「疑難雜症」與這條路線是,如果你也有指定的默認路由,這兩條航線將成爲爭奪,第一個你已經定義了會贏。如果存在某種形式的差異化值(比如,controlId總是匹配某種模式),那麼您總是可以向路由添加HttpRouteConstraint以區分新路由和默認路由。

或者,你可以在你的操作方法,重命名參數,如果你仍在使用默認路由,是id,並更改您的查詢字符串鍵「ID」:

public ActionResult Index(int? id) 
{ 
    // Do Stuff 
} 
+0

這工作完美,你是非常徹底和清晰,非常感謝你! – Smoore

+0

有沒有一種方法可以設置HttpRouteConstraint來確定像int或string之類的東西,還是它必須是像「POST」或「GET」之類的東西? – Smoore

+1

當然 - 查看[this](http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-route-constraint-cs)文章,瞭解如何製作約束。 – Tejs

2

在MyPageController創建方法:

public ActionResult Index (int id) 
{ 
} 

將與默認路由

+0

我想,和它的工作原理,但僅限於需要輸入變量名稱和問號的方式,是否可以在沒有這些的情況下執行? – Smoore