2009-08-18 181 views
1

我有以下途徑:MVC路由問題

routes.MapRoute("Archive", "archive/{year}", new 
    { 
     controller = "Archive", 
     action = "Results" 
    } 
); 

我有正常工作的路線,但我想我的網址顯示如下:

http://mysite.com/archive/2008 

當我點擊搜索按鈕,而不是隻是:

http://mysite.com/archive 

我不希望通過創建一個動作鏈接到網址要做到這一點,我想提交按鈕做。

編輯:

更多信息。在我的主頁上,我有一個文本框,當單擊提交按鈕時,將文本框中鍵入的年份值傳遞給採用一個參數Year的我的存檔控制器中的操作方法結果。我現在在方法中獲得了正確的值,我只希望顯示在url中的年份。如果我在上面的url中手動輸入年份,它就像我期望的那樣工作。

謝謝!

+0

你如何構建你的網址?你用Html.Form幫助器來構造它嗎?你能提供一個你做這個的區域的片段嗎? – paracycle 2009-08-18 08:24:13

+0

見上面,希望有所幫助。 – poindexter12 2009-08-18 15:08:34

回答

3

你應該Year參數傳遞給BeginForm(),如:

<% 
    using (Html.BeginForm("Results", "Archive", new { year = DateTime.Now.Year })) 
    { 
     // form 
    } 
%> 
+0

我需要此值來自之前的表單發佈操作,而不是當前年份。 – poindexter12 2009-08-18 16:14:10

+0

DateTime.Now.Year僅用於一個示例,您可以將其設置爲任何您需要的值。 – veggerby 2009-08-18 17:52:56

1

您需要設置的默認值的{year}參數在這種情況下,2008。因此,你需要的路線如下:

routes.MapRoute("Archive", 
    "archive/{year}", 
    new { controller = "Archive", action = "Results", year = 2008 }); 

你也可以讓這個動態:

routes.MapRoute("Archive", 
    "archive/{year}", 
    new { controller = "Archive", action = "Results", year = DateTime.Now.Year }); 

不過,我要指出,這僅僅是在Web應用程序動態的啓動時間,因爲路由定義爲Application_Start,發生一次,DateTime.Now.Year的值被緩存爲當時的值。

+0

提供一個默認值只是確保一個值傳遞給我的處理動作,它不會放入任何東西,只要我的url結構有關 – poindexter12 2009-08-18 05:30:53

+0

對不起,你是對的。我提供的答案只是確保您獲得正確的默認值。我建議你按照veggerby的回答來回答你的問題。 – paracycle 2009-08-18 08:43:28

1

你也可以有一個名爲「年」是被當您提交表單

<%=Html.Hidden("year",2008) %> 
發佈一個隱藏的表單元素
+0

我需要從上一頁開始動態顯示內容,而不是硬編碼到2008年。 – poindexter12 2009-08-18 16:07:49