@Url.RouteUrl создает адрес в виде текста.
Пример: /Home/Index
@Url.RouteUrl использует похожий шаблон, что и
@Url.Action.
@Url.RouteUrl дополнительно принимает
имя маршрута.
В файле Views/Home/Index.cshtml напишем код:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<!-- head -->
<head>
<meta name="viewport" content="width=device-width" />
<title>Page</title>
</head>
<!-- body -->
<body>
<br /><br /> Вариант1 <br />
@Url.RouteUrl(new { controller = "MyController1", action = "Index", author = "Monte Kristo", id = 10 } /*route*/)
<!-- будет сгенерирован текст
/MyController1/Index/10?author=Monte Kristo
-->
<br /><br /> Вариант2 <br />
@{
RouteValueDictionary dict2 = new RouteValueDictionary();
dict2["controller"] = "MyController1";
dict2["action"] = "Index";
dict2["author"] = "Monte Kristo";
dict2["id"] = 10;
}
@Url.RouteUrl(dict2 /*RouteValueDictionary*/)
<!-- будет сгенерирован текст
/MyController1/Index/10?author=Monte Kristo
-->
<br /><br /> Вариант3 <br />
@Url.RouteUrl("aaa" /*route Name*/)
<!-- будет сгенерирован текст
/
так как controller и action не заданы то возмутся из параметра defaults в файле RouteConfig.cs (объяснение ниже)
-->
<br /><br /> Вариант4 <br />
@Url.RouteUrl("aaa" /*route Name*/, new { action = "Index", author = "Monte Kristo", id = 10 } /*route*/)
<!-- будет сгенерирован текст
/Home/Index/10?author=Monte Kristo
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
<br /><br /> Вариант5 <br />
@{
RouteValueDictionary dict1 = new RouteValueDictionary();
dict1["action"] = "Index";
dict1["author"] = "Monte Kristo";
dict1["id"] = 10;
}
@Url.RouteUrl("aaa" /*route Name*/, dict1 /*route*/)
<!-- будет сгенерирован текст
/Home/Index/10?author=Monte Kristo
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
<br /><br /> Вариант6 <br />
@Url.RouteUrl("aaa" /*route Name*/, new { action = "Index", author = "Monte Kristo", id = 10 } /*route*/, "https" /*protocol*/)
<!-- будет сгенерирован текст
https://localhost/Home/Index/10?author=Monte Kristo
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
<br /><br /> Вариант7 <br />
@{
RouteValueDictionary dict3 = new RouteValueDictionary();
dict3["action"] = "Index";
dict3["author"] = "Monte Kristo";
dict3["id"] = 10;
}
@Url.RouteUrl("aaa" /*route Name*/, dict3 /*route*/, "https" /*protocol*/, "bbbbb" /*hostName*/)
<!-- будет сгенерирован текст
https://bbbbb/Home/Index/10?author=Monte Kristo
Так как мы не задали контроллер то он возмется из файла RouteConfig.cs по route Name="aaa"
-->
</body>
На заметку!
C#
new { controller = "MyController1", action = "Index", author = "Monte Kristo", id = 10 }
это объект с анонимным (отсутствующим) типом в C# ...
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 }
);
}
}
}
На заметку!
C#
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
это объект с анонимным (отсутствующим) типом в C# ...