@Html.RouteLink создает ссылку в виде HTML разметки
<a href="путь ссылки">Название ссылки</a>
@Html.RouteLink использует похожий шаблон, что и
@Html.ActionLink.
@Html.RouteLink дополнительно принимает
имя маршрута.
В файле Views/Home/Index.cshtml напишем код:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<!-- head -->
<head>
<meta name="viewport" content="width=device-width" />
<title>Page</title>
</head>
<!-- style -->
<style>
.myText {
color: green;
}
</style>
<!-- body -->
<body>
@Html.RouteLink("My link1" /*linkText*/, new { controller = "MyController1", action = "Index", author = "Monte Kristo", id = 10 } /*route*/)
<!-- будет сгенерирован элемент
<a href="/MyController1/Index/10?author=Monte Kristo">My link1</a>
-->
@{
RouteValueDictionary dict2 = new RouteValueDictionary();
dict2["controller"] = "MyController1";
dict2["action"] = "Index";
dict2["author"] = "Monte Kristo";
dict2["id"] = 10;
}
@Html.RouteLink("My link2" /*linkText*/, dict2 /*RouteValueDictionary*/)
<!-- будет сгенерирован элемент
<a href="/MyController1/Index/10?author=Monte Kristo">My link2</a>
-->
@Html.RouteLink("My link3" /*linkText*/, "aaa" /*route Name*/)
<!-- будет сгенерирован элемент
<a href="/">My link3</a>
так как controller и action не заданы то возмутся из параметра defaults в файле RouteConfig.cs (объяснение ниже)
-->
@Html.RouteLink("My link4" /*linkText*/, new { controller = "MyController1", action = "Index", author = "Monte Kristo", id = 10 } /*route*/, new { @class = "myText", width = "300px" } /*htmlAttributes*/)
<!-- будет сгенерирован элемент
<a class="myText" href="/MyController1/Index/10?author=Monte Kristo" width="300px">My link4</a>
-->
@{
RouteValueDictionary dict5 = new RouteValueDictionary();
dict5["controller"] = "MyController1";
dict5["action"] = "Index";
dict5["author"] = "Monte Kristo";
dict5["id"] = 10;
IDictionary<string, object> htmlAttributes5 = new Dictionary<string, object>();
htmlAttributes5["class"] = "myText";
htmlAttributes5["width"] = "300px";
}
@Html.RouteLink("My link5" /*linkText*/, dict5 /*route*/, htmlAttributes5 /*htmlAttributes*/)
<!-- будет сгенерирован элемент
<a class="myText" href="/MyController1/Index/10?author=Monte Kristo" width="300px">My link5</a>
-->
@Html.RouteLink("My link6" /*linkText*/, "aaa" /*route Name*/, new { action = "Index", author = "Monte Kristo", id = 10 } /*route*/)
<!-- будет сгенерирован элемент
<a href="/Home/Index/10?author=Monte Kristo">My link6</a>
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
@Html.RouteLink("My link7" /*linkText*/, "aaa" /*route Name*/, new { action = "Index", author = "Monte Kristo", id = 10 } /*route*/, new { @class = "myText", width = "300px" } /*htmlAttributes*/)
<!-- будет сгенерирован элемент
<a class="myText" href="/Home/Index/10?author=Monte Kristo" width="300px">My link7</a>
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
@{
RouteValueDictionary dict8 = new RouteValueDictionary();
dict8["action"] = "Index";
dict8["author"] = "Monte Kristo";
dict8["id"] = 10;
}
@Html.RouteLink("My link8" /*linkText*/, "aaa" /*route Name*/, dict8 /*route*/)
<!-- будет сгенерирован элемент
<a href="/Home/Index/10?author=Monte Kristo">My link8</a>
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
@{
RouteValueDictionary dict9 = new RouteValueDictionary();
dict9["action"] = "Index";
dict9["author"] = "Monte Kristo";
dict9["id"] = 10;
IDictionary<string, object> htmlAttributes9 = new Dictionary<string, object>();
htmlAttributes9["class"] = "myText";
htmlAttributes9["width"] = "300px";
}
@Html.RouteLink("My link9" /*linkText*/, "aaa" /*route Name*/, dict9 /*route*/, htmlAttributes9 /*htmlAttributes*/)
<!-- будет сгенерирован элемент
<a class="myText" href="/Home/Index/10?author=Monte Kristo" width="300px>My link9</a>
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
</body>
На заметку!
C#
new { action = "Index", author = "Monte Kristo", id = 10 }
это объект с анонимным (отсутствующим) типом в C# ...
Имя маршрута это параметр name в файле App_Start\RouteConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace WebApp1
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "aaa",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
в файле Views/Home/Index.cshtml
...
@Html.RouteLink("My link4" /*linkText*/, null /*route*/, new { @class = "myText", width = "300px" } /*htmlAttributes*/)
...
new {свойство1 = значение1, ...} означает
объект с анонимным типом. Читать подробнее ...
Внимание! Мы пишем
@class потому что мы не можем писать просто
class из за ошибки компиляции. Слово
class это зарезервированное слово. Компилятор когда встречает слово
class он считает что это
объявление класса в C#...
На заметку!
C#
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
это объект с анонимным (отсутствующим) типом в C# ...