Как получить идентификатор текущего маршрута в представлении из URL (ASP.NET MVC) - PullRequest
76 голосов
/ 11 июня 2009

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

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

Ответы [ 8 ]

176 голосов
/ 21 июля 2009

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

<%=Url.RequestContext.RouteData.Values["id"]%>
15 голосов
/ 11 июня 2009

ViewData - это правильный способ сделать это.

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

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

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

3 голосов
/ 11 июня 2009

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

2 голосов
/ 04 октября 2017

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

1 голос
/ 15 февраля 2018

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

Это делает доступ к этому значению тривиальным, поскольку 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>
1 голос
/ 07 сентября 2016

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

var routeValues=Url.RequestContext.RouteData.Values;
var paramName = "id";
var id = routeValues.ContainsKey(paramName)?
         routeValues[paramName]:
         Request.QueryString[paramName];
0 голосов
/ 07 июня 2019

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

@Url.RequestContext.RouteData.Values["id"]
0 голосов
/ 10 февраля 2014

я только что использовал <%= model.id %> и все работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...