2010-04-15 29 views
0

我有這兩條路線:問題,路由/ T4MVC Url.Action()

routes.MapRoute("Agenda", ConfigurationManager.AppSettings["eventsUrl"] + "/{year}/{month}", MVC.Events.Index(), new { year = DateTime.Now.Year, month = DateTime.Now.Month }); 
routes.MapRoute("AgendaDetail", ConfigurationManager.AppSettings["eventsUrl"] + "/{year}/{month}/{day}", MVC.Events.Detail(), new { year = DateTime.Now.Year, month = DateTime.Now.Month, day = DateTime.Now.Day }); 

並將其與此代碼完美地工作:

<a href="<%= Url.Action(MVC.Events.Detail(Model.EventsModel.PreviousDay.Year, Model.EventsModel.PreviousDay.Month, Model.EventsModel.PreviousDay.Day))%>" title="<%= Model.EventsModel.PreviousDay.ToShortDateString() %>"><img src="<%= Links.Content.images.contenu.calendrier.grand.mois_precedent_png %>" alt="événement précédent" /></a> 

除了當我可以做的鏈接今天,如果是今天,il只會指向www.myurl.com/agenda,女巫是CnfigurationManager.AppSettings [「eventsUrl」]的價值。我究竟做錯了什麼?這就像是今天,它指向默認日程表的bak ...

感謝您的幫助!

回答

1

實際上,您的路線和Url.Action()調用的工作方式與您預期的完全相同:當路由數據與默認數據相同時,它將從URL中省略。而且,因爲您將DateTime.Now.Day等作爲默認值,所以在鏈接到今天的議程時,它不會包含任何日期值。

但是,這仍然會按照您的要求運行。如果您點擊今日議程的鏈接,您實際上會顯示今天的議程 - 僅在URL中才會顯示。

+0

好了,現在我明白髮生了什麼事情,因爲我的沒有參數的網址對於議程和它的第一個女巫是月視圖的細節是一樣的。我的網址是www.myurl.com/agenda/year/month和www.myurl.com/agenda/year/month/day,因此與這兩個參數都是一樣的www.myurl.com/agenda/我該如何處理?將舊日期指定爲默認參數? – VinnyG 2010-04-16 02:12:52

+0

@Vinny:那麼,你會一直有一些日期或其他發生這種情況。您可以讓* no *默認值,並在未提供任何內容時顯示「未找到」頁面,或者您可以決定將哪個視圖設置爲默認值(每月或每天)並首先放置相應的路徑。現在我想到了,第二個選項可能只適用於如果您希望將日視圖設置爲默認視圖,否則'{month}/{day}'會與'month'參數匹配... – 2010-04-16 07:29:10

+0

Thanks Thomas,我嘗試改變我的路線的順序,但它不像我想要的那樣工作,因爲當我點擊鏈接進入我的每月日曆時,它會轉到日視圖。但通過刪除日間視圖的默認參數,它完美的工作! – VinnyG 2010-04-16 13:39:55

0

有一點需要研究的是,是否真的需要在路由中包含所有這些默認值,因爲它們是問題的根源。例如如果您只是從第二條路線中刪除'day = DateTime.Now.Day'默認值會發生什麼?

你需要決定你想要你的網址做什麼,例如

www.myurl.com/agenda/2010/04 

您想要顯示4/2010的議程,還是希望它顯示今天的AgendaDetail?

+0

我想都是,如果是每月視圖我會在每個事件中顯示每月的大日曆。如果是每天,我會顯示當天事件的細節。所以我需要Url。 – VinnyG 2010-04-16 02:09:45

+0

您是否嘗試過我的建議來刪除默認參數? – 2010-04-16 16:31:41