Dentro de la vista que se devuelve desde una URL como / Controller / Action / 1 (asumiendo la ruta predeterminada de controller / action / id), ¿cómo puedo acceder a la ID desde dentro de la Vista?
No quiero tener que agregarlo al diccionario ViewData en el nivel de acción al manejar la solicitud.
asp.net-mvc
JMS
fuente
fuente
Respuestas:
Creo que esto es lo que estás buscando:
<%=Url.RequestContext.RouteData.Values["id"]%>
fuente
ViewData es exactamente la forma correcta de hacer esto.
Su otra opción sería pasar un modelo que contiene ID a la vista.
Editar: sin saber exactamente lo que quiere hacer, es difícil dar un consejo más específico. ¿Por qué necesita una identificación, pero no otros datos del modelo? ¿Su controlador realmente solo envía el campo Id a la vista? Es difícil imaginar cuál es el escenario.
Si el valor de ID es realmente la única información del modelo que se pasa a su vista, entonces puede usar el ID como modelo. Entonces el valor de retorno de su método de acción sería
View(id)
y no necesitaría usar ViewData.fuente
ViewData["id"] = id;
simplemente no me sienta bien. Supongo que es el hecho de que estoy usando este patrón varias veces. Una o dos veces y probablemente no me importaría. Gracias.Agregarlo a la vista de datos es lo correcto. En cuanto a cómo agregarlo, siempre puede agregar un personalizado
ActionFilter
que lo tome del diccionario de ruta y lo inserte en la vista de datos.fuente
Podemos pasar
id
comoRoute Data
oQueryString
, así que para apoyar a ambos, recomiendo de esta manera:var routeValues=Url.RequestContext.RouteData.Values; var paramName = "id"; var id = routeValues.ContainsKey(paramName)? routeValues[paramName]: Request.QueryString[paramName];
fuente
Creo que puedes usarlo directamente en la acción de URL Url.RequestContext.RouteData.Values ["id"]
fuente
Si está utilizando .NET Core
Usa este código
Url.ActionContext.RouteData.Values["id"]
fuente
Respuesta simple en Razor:
@Url.RequestContext.RouteData.Values["id"]
En ASP.NET Core
@Url.ActionContext.RouteData.Values["id"]
fuente
Solo mis dos centavos, pero siempre uso modelos de vista para pasar cualquier dato a mis vistas. Incluso si es tan simple como necesitar un
int
id.Hacer esto hace que acceder a este valor sea trivial, ya que MVC hace todo el trabajo por usted.
Por lo que vale, normalmente nombro mis modelos de vista como tales:
{Controller}{ViewName}ViewModel
Esto ayuda a mantener las cosas organizadas a escala.
Un ejemplo:
// ~/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>
fuente