2012-10-29 90 views
1

我有一個搜索操作方法,它在此時接受5個可選參數作爲其搜索條件。 我的主頁有一個快速搜索按鈕,它將GET請求提交給搜索操作方法。我有一切 工作正常,但我的網址是使用標準查詢字符串語法生成的(?x = x & y = y)。ASP.NET MVC路由 - 使用可選參數和友好URL進行路由

我想公開友好的網址,但我看到可能使用路由系統的唯一方法是 添加每一個可能的排列因爲所有參數都是可選的,這聽起來不是很優雅。

那麼有沒有其他路線(沒有雙關語:))我可以採取?可能是一個Url重寫模塊?

任何幫助將不勝感激。

回答

0

選項1:住querystrings。搜索頁面上的友好Url沒有什麼特別的。

/search?q=url+routing 

選項2:允許至多有一個可選的參數是「友好」的URL的一部分。任何其他參數都必須在querystrings中傳遞。例如:

/search/query/url+routing (1 parameter) 
/search/query/url+routing?tagged=asp.net (2 parameters) 
/search/query/url+routing?tagged=asp.net&sort=date (3 parameters) 
+0

我想我會用查詢字符串。謝謝。 – Marco

0

您可以設置,如果您能夠接受這樣的URL http://mysite.com/search/{term-1}/{term-n}/{term-n+1}路線:

routes.MapRoute(
    name: "SearchRoute", 
    url: "search/{*terms}", 
    defaults: new { controller = "MySearchController", action = "MySearchAction" } 
); 

在你的行動,你會採取將被/分隔的字符串與您的所有搜索字詞。 (網址可能沒有太大意義,但它可以使用。)

public class SearchController : Controller 
{ 
    public ActionResult SearchAction (string terms) 
    { 
     foreach (var term in terms.Split ('/')) 
     { 
      // Do something 
     } 
    } 
} 
+0

感謝您的建議。 – Marco