2011-07-15 81 views
0

我有一个奇怪的问题。我有一个控制器动作,这需要几个可选参数带空参数的MVC3路由问题

Function Index(sectionID As Integer?, title As String) As ActionResult 

    Return View() 
End Function 

然后我已经添加了这个动作方法的具体路线,使我们得到相当的URL本页

routes.MapRoute(_ 
     "By_Section", _ 
     "home/{sectionID}/{title}", _ 
     New With {.controller = "Home", .action = "Index", .sectionID = Nothing}, 
     New With {.sectionID = "\d+"} 
     ) 

这一切工作。但是,当我在设置sectionID的页面上(例如http://localhost/home/index/1/test)时,以下代码段会产生奇数输出。

<%= Url.Action("Index", "Home")%> 

而不是显示http://localhost/home/index正如你所预料的,它显示http://localhost/home/index/1/test。所以它显示它正在从当前网址获取sectionID和标题,并自动将它们插入到Url中。

我该如何防止这种情况发生?

感谢

詹姆斯

回答

1

是的,这是预期的行为,路由系统,如果你没有明确提供了一个新的值会从当前请求重用的参数值。呈现链接时的最佳选项是为所有路由参数指定显式值。

<%= Url.Action("Index", "Home", new { sectionID = (int?)null }) %> 
+0

感谢您的回复。那么我怎么能强制一个空参数,因为在我的情况下,一个空的sectionID有意义? – James

+0

我已经更新了我的答案 – devdigital