Ответ 1
Я думаю, что это то, что вы ищете:
<%=Url.RequestContext.RouteData.Values["id"]%>
В представлении, которое возвращается из URL-адреса, такого как /Controller/Action/ 1 (если используется маршрут по умолчанию контроллера /action/id ), как я могу получить доступ к идентификатору из представления?
Я не хочу добавлять его в словарь ViewData на уровне действия при обработке запроса.
Я думаю, что это то, что вы ищете:
<%=Url.RequestContext.RouteData.Values["id"]%>
ViewData - это именно то, что нужно сделать.
Другой вариант - передать модель, содержащую ID, в представление.
Изменить: Не зная точно, что вы связываете, трудно дать более конкретные рекомендации. Зачем вам нужен идентификатор, но не какие-либо другие данные модели? Является ли ваш контроллер действительно только отправкой поля Id в представление? Трудно представить, что такое сценарий.
Если значение ID действительно является единственной модельной информацией, передаваемой вашему представлению, тогда вы можете использовать сам ID как модель. Тогда возвращаемое значение вашего метода действия будет View(id)
, и вам не нужно будет использовать ViewData.
Добавление его в viewdata - это правильная вещь. Что касается того, как добавить его, вы всегда можете добавить пользовательский ActionFilter
, который захватывает его из словаря маршрута и выталкивает его в viewdata.
Я думаю, вы можете прямо использовать в действии url Url.RequestContext.RouteData.Values [ "ID" ]
Мы можем передать id
как Route Data
или QueryString
, поэтому, чтобы поддерживать оба из них, я рекомендую этот способ:
var routeValues=Url.RequestContext.RouteData.Values;
var paramName = "id";
var id = routeValues.ContainsKey(paramName)?
routeValues[paramName]:
Request.QueryString[paramName];
Просто мои два цента, но я всегда использую модели представления для передачи любых данных в мои представления. Даже если это так просто, как нужно 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>
Простой ответ в бритве:
@Url.RequestContext.RouteData.Values["id"]
Я просто использовал <%= model.id %>
, и он работает