Qual é a melhor maneira de substituir links por imagens usando o Razor no MVC3. Eu simplesmente estou fazendo isso no momento:
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a>
Existe uma maneira melhor?
image
asp.net-mvc-3
action
razor
davy
fonte
fonte
~/Content
). O caminho../../Content
pode não ser válida a partir de diferentes rotas (por exemplo/
,/Home
,/Home/Index
).Respostas:
Você pode criar um método de extensão para o HtmlHelper para simplificar o código no seu arquivo CSHTML. Você pode substituir suas tags por um método como este:
Aqui está um exemplo de método de extensão para o código acima:
fonte
routeValues
paraActionResult
e, em seguida, naurl.Action
mudança de funçãorouteValues
pararouteValues.GetRouteValueDictionary()
/configuration/system.web/pages/namespaces
elemento.alt
, eu aceito um objeto para receber propriedades HTML usando um objeto anônimo, em seguida,var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
e, finalmente,foreach (var attr in attributes){ imgBuilder.MergeAttribute(attr.Key, attr.Value.ToString());}
/Views
pasta de nível superiorVocê pode usar o
Url.Content
que funciona para todos os links, pois ele converte o til~
no uri raiz.fonte
<a href="@Url.Action("Index","Home")"><img src="@Url.Content("~/Content/images/myimage.gif")" alt="Home" /></a>
Com base na resposta de Lucas acima, esta é uma sobrecarga que assume um nome de controlador como parâmetro, semelhante ao ActionLink. Use essa sobrecarga quando a imagem estiver vinculada a uma ação em um controlador diferente.
fonte
Bem, você pode usar a solução @Lucas, mas também há outra maneira.
Agora, adicione esta classe em um arquivo CSS ou em sua página:
Com essa classe, qualquer link terá a imagem desejada.
fonte
ControllerName
de sua ação. Assim:@Html.ActionLink("Update", "Update", "*Your Controller*",*object values*, new {@class = "imgLink"})
Isso acabou sendo um tópico muito útil.
Para quem é alérgico a chaves, aqui está a versão VB.NET das respostas de Lucas e Crake:
fonte
Este método de extensão também funciona (para ser colocado em uma classe estática pública):
fonte
Para adicionar a todo o trabalho impressionante iniciado por Luke, estou postando mais um que usa um valor de classe css e trata class e alt como parâmetros opcionais (válidos no ASP.NET 3.5+). Isso permitirá mais funcionalidade, mas reduzirá o número de métodos sobrecarregados necessários.
fonte
modificação do slide alterada Helper
Classe CSS
Crie o link basta passar o nome da classe
fonte
Eu juntei a resposta de Lucas e " ASP.NET MVC Helpers, Mesclando dois objetos htmlAttributes juntos " e mais controllerName para o seguinte código:
// Exemplo de uso em CSHTML
E a classe de extensão para o código acima:
fonte
Isso seria muito bom trabalho
fonte