代码之家  ›  专栏  ›  技术社区  ›  Jason Whitehorn

ActionLink在ASP.NET MVC测试版中使用VIEWDATA参数失败

  •  2
  • Jason Whitehorn  · 技术社区  · 16 年前

    我在ASP.NET MVC测试版中遇到了一个关于actionLink方法的奇怪问题。当使用来自MVC Futures的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>
    

    我假设这可能与可视数据的可见性和可用性有关,并且当lambda由框架内部进行评估时,它不在那里。但这只是一个猜测。

    我是否在第一个样本中做了不正确的事情导致了这种情况,或者这是某种缺陷?

    更新 :我正在使用最新版本的MVC Futures。有人指出这对某些人有效。因为它对我不起作用,这让我觉得它是我正在做的事情的特定部分。有人对下一步该看什么有什么建议吗,因为这一次真的让我难堪。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Schotime    16 年前

    是否更新了强类型ActionLink所在的Microsoft.Web.mvc.dll版本?

    显然这个dll已经为beta版本更新了。此功能可能已被轻微修改。

    我刚试过这个

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

    而且效果很好。

        2
  •  0
  •   Jason Whitehorn    16 年前

    好吧,我知道我的问题是什么。

    显然,我甚至没有设置视图中试图读取的viewdata槽,结果它是一个空值。

    所以我写的很有效果:

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

    我认为,这整件事的最大亮点是参数(groupname)在路由表中表示一个不可默认的值。

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

    因此,根据路由规则,属性groupname必须存在,但根据go,lambda gropname被省略(空)。这导致MVC框架找不到满足我查询的路由,只返回空值。