【问题标题】:Html.ActionLink() call errorHtml.ActionLink() 调用错误
【发布时间】:2011-10-28 20:22:19
【问题描述】:

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

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

这个局部视图在我的_Layout.cshtml 视图中呈现。调用控制器/动作的 sn-p 是这样的:

@{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() 方法来获取字符串形式的参数。

【问题讨论】:

  • 在您的另一个调用中,ActionLink 的第一个参数是 ViewData 对象吗?
  • @Xaisoft 你知道吗,它实际上是"Some Text Here" + ViewData["key"],在这种情况下我猜ViewData["key"] 被转换为一个字符串。很好的收获。
  • 没问题,我有种感觉。祝你好运。

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


【解决方案1】:

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

试试这个只是作为一个测试

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

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

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

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

【讨论】:

  • ViewData 是一个对象,而不是一个枚举
  • 谢谢,我已经读过它现在是一本对象字典。不过还是谢谢你!
  • 通常,将任何内容传递给视图的最佳方式是使用视图模型。那么你就可以确定所有的东西都是安全的,你不会拼错的;)
  • ViewBag 和 ViewData 是同一个对象,你可以把数据放入或者取出数据(试试把数据放入ViewBag,然后用相同的名字从ViewData取出数据看看我的意思)
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多