Ошибка вызова Html.ActionLink () - PullRequest
1 голос
/ 29 октября 2011

Я использую ASP.NET MVC 3 с движком Razor. У меня есть частичное представление, которое содержит одну строку:

@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, строка, объект) 'имеет недопустимые аргументы

Я сделал аналогичный вызов (такое же количество аргументов и те же типы данных параметров) в другом приложении MVC (учебное пособие), и он был выполнен просто отлично. Что может быть причиной этого?? Почему это не работает сейчас?

Я знаю, что это, вероятно, чрезвычайно новичок в вопросе MVC, но я не могу понять его.

РЕДАКТИРОВАТЬ: Решение заключается в следующем:

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

Мне просто нужно было вызвать метод ToString(), чтобы получить параметр в виде строки.

Ответы [ 2 ]

4 голосов
/ 29 октября 2011

Вам нужна строка в качестве первого параметра в 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 голос
/ 29 октября 2011

Это потому, что ViewData / ViewBag - это динамическая система, которая не имеет представления о том, какой тип данных она содержит, поэтому вам необходимо распаковать ее в локальную переменную, прежде чем пытаться использовать ее

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

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