Pregunta Cómo obtener el ID de ruta actual dentro de una Vista desde la URL (ASP.NET MVC)


Dentro de la vista que se devuelve desde una URL como / Controller / Action / 1 (asumiendo la ruta predeterminada de controlador / acción / id), ¿cómo puedo obtener acceso a la ID desde la vista?

No quiero tener que agregarlo al diccionario ViewData en el nivel de acción al manejar la solicitud.


74
2018-06-11 05:46


origen


Respuestas:


Creo que esto es lo que estás buscando:

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

171
2017-07-21 16:55



ViewData es exactamente la forma correcta de hacerlo.

Su otra opción sería pasar un modelo que contenga ID a la vista.

Editar: Sin saber exactamente lo que estás tratando de hacer, es difícil dar consejos más específicos. ¿Por qué necesita una identificación, pero no otros datos de modelos? ¿Su controlador realmente solo está enviando el campo Id a la vista? Es difícil imaginar cuál es el escenario.

Si el valor de ID es realmente el único modelo de información que se está pasando a su vista, entonces podría usar la propia ID como modelo. Entonces el valor de retorno de su método de acción sería View(id) y no necesitarías usar ViewData.


14
2018-06-11 06:00



Agregarlo a los viewdata es lo correcto. En cuanto a cómo agregarlo, siempre puedes agregar una personalizada ActionFilter que lo toma del diccionario de ruta y lo introduce en los datos de vista.


3
2018-06-11 14:43



Podemos pasar id como Route Data o QueryString, entonces apoyar a ambos Lo recomiendo de esta manera:

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

1
2017-09-06 23:47



Creo que puedes dirigir el uso en la acción de la url Url.RequestContext.RouteData.Values ​​["id"]


1
2017-10-04 06:58



Solo mis dos centavos, pero siempre uso los modelos de vista para pasar cualquier información a mis puntos de vista. Incluso si es tan simple como necesitar un int como el id.

Hacer esto hace que el acceso a este valor sea trivial, ya que MVC hace todo el trabajo por usted.

Por lo que vale, por lo general nombre mis modelos de vista como tal:

{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>

1
2018-02-15 14:59



acabo de usar <%= model.id %> y funciona


-1
2018-02-10 11:26