2008-10-19 38 views
2

我在ASP.NET MVC Beta中遇到了ActionLink方法的一个奇怪问题。当从MVC期货使用Lambda超载时,我似乎无法指定从ViewData中提取的参数。ActionLink失败,ASP.NET MVC中的ViewData参数Beta

当我试试这个:

<%= Html.ActionLink<PhotoController>(p => p.Upload(((string)ViewData["groupName"])), "upload new photo") %> 

HTML中包含一个空的URL链接。

<a href="">upload new photo</a> 

但是,如果我硬编码参数,就像这样:

<%= Html.ActionLink<PhotoController>(p => p.Upload("groupA"), "upload new photo") %> 

输出包含一个实际的URL。

<a href="/group/groupA/Photo/Upload">upload new photo</a> 

我认为这可能有事情做与ViewData的的可见性和可用性,它不是在那里当拉姆达得到由框架的内部评估。但这只是一个猜测。

我做得第一样品中不正确导致此,或这是一些简短的bug?

更新:我正在使用最新版本的MVC期货。有人指出,这对一些人有效。既然它不适合我,这让我觉得这是我所做的特定事情。有没有人对接下来要看的内容有任何建议,因为这真的让我难堪。

回答

0

好吧,我想清楚我的问题是什么。

显然我甚至没有设置,我试图从视图中的阅读,导致它是一个空值的ViewData的插槽。

所以有效地我写:

<%= Html.ActionLink<PhotoController>(p => p.Upload(null), "upload new photo") %> 

我认为最终起脚这整个事情是一个事实,即参数(组名)代表我的路由表中的非违约值。

routes.MapRoute(
    "Group", 
    "group/{groupname}/{controller}/{action}/{id}", 
    new {controller = "Photos", action = "View", Id = ""}); 

所以根据路由规则,属性groupname必须存在,但根据去掉lambda gropname被省略(null)。这导致MVC框架无法找到满足我的查询的路由,而只是返回null。

2

您已更新,其中强类型ActionLink的所在Microsoft.Web.Mvc.dll的版本。

显然这个DLL已经更新为Beta版本。该功能可能已稍作修改。

我只是尝试这样做

<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %> 

它工作得很好。

+0

我的Microsoft.Web.Mvc版本是1.0.31003.0。我从10月16日发布的ASP.NET MVC期货下载CodePlex。那么看起来这是我做错了什么,但是什么? – 2008-10-19 14:03:00