Html.ActionLink()调用错误

时间:2011-10-28 20:22:20

标签: c# asp.net asp.net-mvc asp.net-mvc-3 html-helper

我正在使用带有Razor引擎的ASP.NET MVC 3。我有一个包含一行的部分视图:

@Html.ActionLink(ViewData["UserNameIfLoggedIn"], "Index", "Home")

此部分视图在我的_Layout.cshtml视图中呈现。调用控制器/动作的片段是:

@{Html.RenderAction("UserLoggedIn", "User");}

我收到编译错误,说明:
'System.Web.Mvc.HtmlHelper'不包含'ActionLink'的定义和最佳扩展方法重载'System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,string, string,object)'有一些无效的参数

我在另一个MVC应用程序(教程)中做了类似的调用(相同数量的参数和相同的参数数据类型),并且执行得很好。什么可能导致这?为什么现在不起作用?

我知道这可能是一个非常新秀的MVC问题,但我无法想出这个问题。

编辑:解决方案是:

@Html.ActionLink(ViewData["UserNameIfLoggedIn"].ToString(), "Index", "Home")

我只需要调用ToString()方法将参数作为字符串。

2 个答案:

答案 0 :(得分:4)

你需要一个字符串作为ActionLink中的第一个参数,我不确定,但我认为ViewData是一个字典。

试试这个作为测试

@Html.ActionLink("test", "Index", "Home")

如果可行,则需要遍历ViewData并获取所有单个值,并将它们作为字符串传递。不过,我不确定你的ViewData是什么。

如果您只想要一个值,请改用ViewBag。

http://brendan.enrick.com/post/Difference-Between-ViewBag-and-ViewData-in-MVC-3.aspx

答案 1 :(得分:1)

这是因为ViewData / ViewBag是一个动态的,它不知道它拥有什么类型的数据,你需要在尝试使用它之前将其拆箱到一个局部变量

@{ var foo = ViewData["Title"]; }

@Html.ActionLink(foo.ToString(), "Index", "Home")