Digamos que eu tenho uma aula
public class ItemController:Controller
{
public ActionResult Login(int id)
{
return View("Hi", id);
}
}
Em uma página que não está localizada na pasta Item, onde ItemController
reside, desejo criar um link para o Login
método. Então, qual Html.ActionLink
método devo usar e quais parâmetros devo passar?
Especificamente, estou procurando a substituição do método
Html.ActionLink(article.Title,
new { controller = "Articles", action = "Details",
id = article.ArticleID })
que foi aposentado na recente encarnação do ASP.NET MVC.
c#
.net
asp.net-mvc
html-helper
actionlink
Graviton
fonte
fonte
Respostas:
Eu acho que o que você quer é isso:
ASP.NET MVC1
Isso usa o seguinte método ActionLink signature:
ASP.NET MVC2
dois argumentos foram trocados
Isso usa o seguinte método ActionLink signature:
ASP.NET MVC3 +
argumentos estão na mesma ordem que o MVC2, no entanto, o valor do ID não é mais necessário:
Isso evita a codificação embutida de qualquer lógica de roteamento no link.
Isso fornecerá a seguinte saída html, assumindo:
article.Title = "Title"
article.ArticleID = 5
. .
fonte
, null
parâmetro APÓS o seunew { ... }
... porque se você verificar as sobrecargas desse método, está pensando que seus parâmetros são htmlArguments ... não rotear argumentos. Para usar o método correto , você precisa usar o método que possuirouteArguments, htmlArguments
.. então basta passar nulo para esse últimohtmlArgument
. O primeiro trecho de código nesta resposta possui. Atualizei esta postagem para que você possa ver com facilidade (ou seja, ela não rola).@Html.ActionLink("Text","Action","Controller", new { item.ID }, null)
Eu queria acrescentar à resposta de Joseph Kingry . Ele forneceu a solução, mas no começo eu também não consegui fazê-la funcionar e obtive um resultado exatamente como Adhip Gupta. E então percebi que a rota precisa existir em primeiro lugar e os parâmetros precisam corresponder exatamente à rota. Então, eu tinha um ID e, em seguida, um parâmetro de texto para minha rota, que também precisava ser incluído também.
fonte
Você pode querer olhar para o
RouteLink()
método. Esse permite especificar tudo (exceto o texto do link e o nome da rota) por meio de um dicionário.fonte
Eu acho que Joseph inverteu o controle e a ação. Primeiro vem a ação e depois o controlador. Isso é um pouco estranho, mas a aparência da assinatura.
Apenas para esclarecer as coisas, esta é a versão que funciona (adaptação do exemplo de Joseph):
fonte
que tal isso
fonte
fonte
Se você quiser usar calças justas, veja como você pode estendê-lo para poder fazer isso:
Você precisará colocar isso no
System.Web.Mvc
espaço para nome:Isso inclui duas substituições para
Route Values
eHTML Attributes
, também, todas as suas visualizações precisariam ser adicionadas:@using YourProject.Controllers
ou você pode adicioná-lo ao seuweb.config <pages><namespaces>
fonte
Use parâmetros nomeados para facilitar a leitura e evitar confusões.
fonte
Com MVC5 eu fiz isso assim e é 100% código de trabalho ....
Vocês podem ter uma idéia disso ...
fonte
Este tipo usa:
@ Html.ActionLink ("MainPage", "Índice", "Página Inicial")
MainPage: Nome do texto Índice: Ação Exibir Home: HomeController
ActionLink de uso básico
fonte