asp.net-mvc - mvc - route asp.net core
Cómo obtener el ID de ruta actual dentro de una Vista desde la URL(ASP.NET MVC) (7)
Agregarlo a los viewdata es lo correcto. En cuanto a cómo agregarlo, siempre puedes agregar un ActionFilter
personalizado que lo agarra del diccionario de ruta y lo envía a los viewdata.
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.
Creo que esto es lo que estás buscando:
<%=Url.RequestContext.RouteData.Values["id"]%>
Creo que puedes dirigir el uso en la acción url Url.RequestContext.RouteData.Values ["id"]
Podemos pasar la id
como Route Data
o QueryString
, por lo tanto, para respaldar a ambos, los recomiendo de esta manera:
var routeValues=Url.RequestContext.RouteData.Values;
var paramName = "id";
var id = routeValues.ContainsKey(paramName)?
routeValues[paramName]:
Request.QueryString[paramName];
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 una int
como la 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, normalmente name 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>
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ía usar ViewData.
acabo de usar <%= model.id %>
y funciona