Допустим, у меня есть класс
public class ItemController:Controller
{
public ActionResult Login(int id)
{
return View("Hi", id);
}
}
На странице, которая не находится в папке Item, где ItemController
находится, я хочу создать ссылку на Login
метод. Так какой Html.ActionLink
метод я должен использовать и какие параметры я должен передать?
В частности, я ищу замену метода
Html.ActionLink(article.Title,
new { controller = "Articles", action = "Details",
id = article.ArticleID })
это было удалено в недавнем воплощении ASP.NET MVC.
c#
.net
asp.net-mvc
html-helper
actionlink
Гравитон
источник
источник
Ответы:
Я думаю, что вы хотите это:
ASP.NET MVC1
При этом используется следующий метод подписи ActionLink:
ASP.NET MVC2
два аргумента были переключены вокруг
При этом используется следующий метод подписи ActionLink:
ASP.NET MVC3 +
аргументы находятся в том же порядке, что и MVC2, однако значение id больше не требуется:
Это позволяет избежать жесткого кодирования любой логики маршрутизации в ссылку.
Это даст вам следующий вывод html, если:
article.Title = "Title"
article.ArticleID = 5
, ,
источник
, null
параметр ПОСЛЕ вашегоnew { ... }
... потому что, если вы проверяете перегрузки этого метода, он думает, что ваши параметры являются htmlArguments ... не аргументы маршрута. Чтобы использовать правильный метод, вам нужно использовать метод, который имеетrouteArguments, htmlArguments
.. так что просто передайте значение null для этого последнегоhtmlArgument
. Первый фрагмент кода в этом ответе имеет это. Я обновил этот пост, чтобы вы могли легко это увидеть (т.е. он не прокручивается).@Html.ActionLink("Text","Action","Controller", new { item.ID }, null)
Я хотел добавить к ответу Джозефа Кингри . Он предоставил решение, но сначала я тоже не смог заставить его работать и получил результат, как Adhip Gupta. И тогда я понял, что маршрут должен существовать в первую очередь и параметры должны точно соответствовать маршруту. Так что у меня был идентификатор, а затем текстовый параметр для моего маршрута, который тоже нужно было включить.
источник
Возможно, вы захотите взглянуть на метод.
RouteLink()
Он позволяет вам указать все (кроме текста ссылки и названия маршрута) через словарь.источник
Я думаю, что Джозеф переключил контроллер и действие. Сначала идет действие, затем контроллер. Это несколько странно, но как выглядит подпись.
Просто чтобы прояснить ситуацию, это версия, которая работает (адаптация примера Джозефа):
источник
как насчет этого
источник
источник
Если вы хотите использовать все модные штаны, вот как вы можете расширить это, чтобы иметь возможность сделать это:
Вам нужно будет поместить это в
System.Web.Mvc
пространство имен:Это включает в себя два переопределения для
Route Values
иHTML Attributes
, кроме того, все ваши представления нужно будет добавить:@using YourProject.Controllers
или вы можете добавить его в свойweb.config <pages><namespaces>
источник
Используйте именованные параметры для удобства чтения и избежания путаницы.
источник
С MVC5 я сделал это так, и это 100% рабочий код ....
Вы, ребята, можете получить представление об этом ...
источник
Этот тип использования:
@ Html.ActionLink ( "MainPage", "Index", "Начало")
MainPage: Имя текста Указатель: Action View Home: HomeController
Базовое использование ActionLink
источник