Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Html.ActionLink()调用错误_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Html Helper - Fatal编程技术网

C# Html.ActionLink()调用错误

C# Html.ActionLink()调用错误,c#,asp.net,asp.net-mvc,asp.net-mvc-3,html-helper,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Html Helper,我使用的是ASP.NETMVC3Razor引擎。我有一个局部视图,其中包含一行: @Html.ActionLink(ViewData["UserNameIfLoggedIn"], "Index", "Home") 此局部视图在我的\u Layout.cshtml视图中呈现。调用控制器/操作的代码段如下: @{Html.RenderAction("UserLoggedIn", "User");} @Html.ActionLink(ViewData["UserNameIfLoggedIn"].T

我使用的是ASP.NETMVC3Razor引擎。我有一个局部视图,其中包含一行:

@Html.ActionLink(ViewData["UserNameIfLoggedIn"], "Index", "Home")
此局部视图在我的
\u Layout.cshtml
视图中呈现。调用控制器/操作的代码段如下:

@{Html.RenderAction("UserLoggedIn", "User");}
@Html.ActionLink(ViewData["UserNameIfLoggedIn"].ToString(), "Index", "Home")
我得到一个编译错误,声明:
“System.Web.Mvc.HtmlHelper”不包含“ActionLink”的定义和“System.Web.Mvc.Html.LinkExtensions”的最佳扩展方法重载。ActionLink(System.Web.Mvc.HtmlHelper,string,string,object)具有一些无效参数

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

我知道这可能是一个非常新的MVC问题,但我无法理解这个问题

编辑:解决方案如下:

@{Html.RenderAction("UserLoggedIn", "User");}
@Html.ActionLink(ViewData["UserNameIfLoggedIn"].ToString(), "Index", "Home")

我只需要调用
ToString()
方法以获取字符串形式的参数。

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

试着做个测试

@Html.ActionLink("test", "Index", "Home")
如果这样做有效,则需要循环查看数据并获取所有单个值,并将它们作为字符串传递。不过,我不确定您的ViewData是什么

如果只需要一个值,请使用ViewBag


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

试着做个测试

@Html.ActionLink("test", "Index", "Home")
如果这样做有效,则需要循环查看数据并获取所有单个值,并将它们作为字符串传递。不过,我不确定您的ViewData是什么

如果只需要一个值,请使用ViewBag


这是因为ViewData/ViewBag是一个动态变量,不知道它包含什么类型的数据,所以在尝试使用它之前,需要将其解装箱到局部变量中

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

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

这是因为ViewData/ViewBag是动态的,不知道它包含什么类型的数据,所以在尝试使用它之前,需要将其解装箱到局部变量中

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

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

在您的另一个调用中,ActionLink的第一个参数是ViewData对象吗?@Xaisoft您知道吗,它实际上是
“此处的某些文本”+ViewData[“key”]
,在这种情况下,我猜
ViewData[“key”]
被转换为字符串。接得好。没问题,我有种感觉就是这样。祝你好运,你看到这个了吗?在您的另一个调用中,ActionLink的第一个参数是ViewData对象吗?@Xaisoft您知道吗,它实际上是
“此处的某些文本”+ViewData[“key”]
,在这种情况下,我猜
ViewData[“key”]
被转换为字符串。接得好。没问题,我有种感觉就是这样。祝你好运,你看到这个了吗?ViewData是一个对象,不是枚举。谢谢,我已经读过了,它现在是一个对象字典。谢谢你!通常,将任何内容传递给视图的最佳方式是使用视图模型。然后您可以确定所有内容都是安全键入的,并且不会出现拼写错误;)ViewBag和ViewData是同一个对象,您可以使用将数据放入或取出(尝试将数据放入ViewBag中,然后使用相同的名称从ViewData中取出数据,以了解我的意思)ViewData是一个对象,而不是枚举。谢谢,我已经阅读了它是一个对象字典。谢谢你!通常,将任何内容传递给视图的最佳方式是使用视图模型。然后您可以确定所有内容都是安全键入的,并且不会出现拼写错误;)ViewBag和ViewData是同一个对象,您可以使用将数据放入或取出(尝试将数据放入ViewBag,然后使用相同的名称从ViewData中取出数据,以了解我的意思)