Как получить текущий идентификатор маршрута в представлении из URL (ASP.NET MVC)

В представлении, которое возвращается из URL-адреса, такого как /Controller/Action/ 1 (если используется маршрут по умолчанию контроллера /action/id ), как я могу получить доступ к идентификатору из представления?

Я не хочу добавлять его в словарь ViewData на уровне действия при обработке запроса.

Ответ 1

Я думаю, что это то, что вы ищете:

<%=Url.RequestContext.RouteData.Values["id"]%>

Ответ 2

ViewData - это именно то, что нужно сделать.

Другой вариант - передать модель, содержащую ID, в представление.

Изменить: Не зная точно, что вы связываете, трудно дать более конкретные рекомендации. Зачем вам нужен идентификатор, но не какие-либо другие данные модели? Является ли ваш контроллер действительно только отправкой поля Id в представление? Трудно представить, что такое сценарий.

Если значение ID действительно является единственной модельной информацией, передаваемой вашему представлению, тогда вы можете использовать сам ID как модель. Тогда возвращаемое значение вашего метода действия будет View(id), и вам не нужно будет использовать ViewData.

Ответ 3

Добавление его в viewdata - это правильная вещь. Что касается того, как добавить его, вы всегда можете добавить пользовательский ActionFilter, который захватывает его из словаря маршрута и выталкивает его в viewdata.

Ответ 4

Я думаю, вы можете прямо использовать в действии url Url.RequestContext.RouteData.Values ​​[ "ID" ]

Ответ 5

Мы можем передать id как Route Data или QueryString, поэтому, чтобы поддерживать оба из них, я рекомендую этот способ:

var routeValues=Url.RequestContext.RouteData.Values;
var paramName = "id";
var id = routeValues.ContainsKey(paramName)?
         routeValues[paramName]:
         Request.QueryString[paramName];

Ответ 6

Просто мои два цента, но я всегда использую модели представления для передачи любых данных в мои представления. Даже если это так просто, как нужно int как id.

Это делает доступ к этому значению тривиальным, так как MVC делает всю работу за вас.

Для чего это стоит, я обычно называю свои модели представлений такими:

{Controller}{ViewName}ViewModel

Это помогает держать вещи в масштабе.

Пример:

// ~/ViewModels/HomeEditViewModel.cs
public class HomeEditViewModel
{
  public int Id { get; set; }
}

// ~/Controllers/HomeController.cs
public IActionResult Edit(int id)
{
  return View(new HomeEditViewModel() { Id = id });
}

// ~/Views/Home/Edit.cshtml
@model HomeEditViewModel

<h1>Id: @Model.Id</h1>

Ответ 7

Простой ответ в бритве:

@Url.RequestContext.RouteData.Values["id"]

Ответ 8

Я просто использовал <%= model.id %>, и он работает