2

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

当我尝试这个时:

<%= 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 的可见性和可用性有关,并且当 Lambda 被框架内部评估时,它不存在。但这只是一个猜测。

我是在第一个示例中做错了什么导致这种情况,还是缺少一些错误?

更新:我正在使用最新版本的 MVC 期货。有人指出,这对某些人有效。由于它对我不起作用,这让我认为这是我正在做的事情。有没有人对接下来要看什么有任何建议,因为这个真的让我很难过。

4

2 回答 2

2

您是否更新了强类型操作链接所在的 Microsoft.Web.Mvc.dll 版本。

显然,此 dll 已针对 Beta 版本进行了更新。该功能可能已稍作修改。

我刚试过这个

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

它工作得很好。

于 2008-10-19T13:00:51.177 回答
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 必须存在,但根据 go Lambda gropname 被省略(null)。这导致 MVC 框架无法找到满足我查询的路由,并且只返回 null。

于 2008-10-20T01:56:09.883 回答