2010-04-15 60 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