使用@ Html.ActionLink()时出错

时间:2013-10-06 11:25:32

标签: .net asp.net-mvc compiler-errors html.actionlink

获取以下错误..

  

编译器错误消息:CS1973:'System.Web.Mvc.HtmlHelper'没有名为'ActionLink'的适用方法,但似乎有一个名称的扩展方法。无法动态分派扩展方法。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。

在MVC应用程序中,我正在尝试使用字典条目的键作为链接的链接文本,但是我得到了错误。

这是我遇到错误的行......我尝试用@ item.Key和其他各种方法替换item.Key。

@Html.ActionLink(item.Key,"ExpandFolder","Home",new {path=item.Key },null)

我的整个视图代码看起来像这样......

<form id="ViewFiles" method="post"  action="Index">
    <ul>
        @foreach (var item in @ViewBag.filesFolders)
        {
            if (item.Value == "folder")
            {
                <li>
                    @Html.ActionLink(item.Key,"ExpandFolder","Home",new {path=item.Key },null)
                </li>  
            }
            else if (item.Value == "file")
            {
                <li><a href="">FILES-@item.Key</a></li>  
            }
        }
    </ul>
</form>

2 个答案:

答案 0 :(得分:12)

将字符item.Key输入字符串

@Html.ActionLink((string)item.Key,"ExpandFolder","Home",new {path=item.Key },null)

答案 1 :(得分:6)

@ViewBag.filesFolders

这是问题所在。 HtmlHelper返回错误描述:

  

无法动态调度扩展方法。

您的ViewBag.filesFolders是动态类型的视图包,因此会导致问题。

您应该使用强类型的ViewModel(以及更好的IEnumerable<T>)来展示您的filesFolders

其他解决方案是将您的item.Key转换为string类型,因此它将如下所示:

@Html.ActionLink((string)item.Key, "ExpandFolder", "Home", new {path=item.Key }, null)

但正如我之前所说,我建议将来使用强类型的View模型。